Google App Engine上で、どのように私はGQLで、顧客のために、最新の順序を調べるのでしょうか?
-
05-09-2019 - |
質問
私は2つのテーブル、顧客と注文を持っている、と私は顧客のために、最新の順序を検索したい場合は、
、どのように私はGQLを使用して、GoogleのApp Engine上でこれを行うだろうか?
通常、私は、受注テーブルに存在する外部キー、CUSTOMER_ID、を介してこれらの2つのテーブルを結合します。
select orders.* from customers, orders
where customers.customer_id = orders.customer_id
and orders.order_id = (select top 1 sub_orders.order_id from orders sub_orders
where sub_orders.customer_id = orders.customer_id
order by sub_orders.order_date desc)
参加するにはGoogle App Engineの上で可能であると思われないので、しかし、私はこの制限を回避するかどうかはわかりません。任意の提案をいただければ幸いです。
解決
Google App Engineのデータストアは、リレーショナルデータベースから実際にはかなり異なっています。そこにいくつかの類似点がありますが、あなたのデータモデルを設計するとき、それは違いを理解することが重要です。
あなたは通常、このような関係を定義する方法は、参照プロパティを使用することです。
class Customer(db.Model):
name = db.StringProperty()
class Order(db.Model):
customer = db.ReferenceProperty( Customer,
collection_name = 'orders' )
「顧客が」顧客のインスタンスである場合は、「受注」という名前のCustomerエンティティのプロパティの作成においてOrderエンティティ定義の結果でReferencePropertyは、あなたが顧客を参照することにより、すべての注文を見つけることができるようにします。ご注文'。
例
customer = Customer.gql("WHERE name = :1", "Bob")[0] # Returns the first customer named Bob
order1 = customer.orders[0]
order2 = customer.orders.order("date")[0] # Sorts the Orders by date and gets the first one
リファレンス・プロパティは、ここに記載されています。に
理解するためのもう一つの重要な概念は、エンティティグループの考え方です。エンティティグループ内のエンティティは、同じノード上に格納され、したがって、それらは保存することができ、より効率的に検索されました。彼らはまた、トランザクションを使用するために重要です。
所属していません StackOverflow