Google App Engine上で、どのように私はGQLで、顧客のために、最新の順序を調べるのでしょうか?

StackOverflow https://stackoverflow.com/questions/902516

  •  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

リファレンス・プロパティは、ここに記載されています。

理解するためのもう一つの重要な概念は、エンティティグループの考え方です。エンティティグループ内のエンティティは、同じノード上に格納され、したがって、それらは保存することができ、より効率的に検索されました。彼らはまた、トランザクションを使用するために重要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top