Auf Google App Engine, wie würde ich den aktuellen Auftrag für einen Kunden in GQL nachschlagen?

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

  •  05-09-2019
  •  | 
  •  

Frage

Wenn ich zwei Tabellen, Kunden und Bestellungen, und ich mag den aktuellen Auftrag für einen Kunden suchen, wie würde ich tue dies auf Google App Engine GQL mit?

Normalerweise würde ich diese beiden Tabellen durch den Fremdschlüssel, customer_id, an denen in der Auftragstabelle vorhanden ist.

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)

Allerdings schließt sich da offenbar nicht auf Google App Engine möglich sein, ich bin nicht sicher, wie um diese Einschränkung zu arbeiten. Alle Vorschläge würden geschätzt.

War es hilfreich?

Lösung

Die Datastor in Google App Engine sind wirklich ganz anders aus einer relationalen Datenbank. Es gibt einige Ähnlichkeiten, aber es ist wichtig, die Unterschiede zu verstehen, wenn Sie Ihnen Datenmodell entwerfen.

Die Art und Weise Sie in der Regel diese Art von Beziehung definieren würde durch die Verwendung Referenz Eigenschaften:

class Customer(db.Model):
    name = db.StringProperty()

class Order(db.Model):
   customer = db.ReferenceProperty( Customer,
                                    collection_name = 'orders' )

Die Reference in den Bestellformularen Entitätsdefinition Ergebnisse bei der Schaffung einer Immobilie in der Customer-Entität, mit dem Namen ‚Aufträge‘, so dass, wenn ‚Kunde‘ eine Kunden Instanz ist, können Sie alle Aufträge unter Bezugnahme auf die ‚Kunden finden können. Aufträge'.

Zum Beispiel:

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

Referenzobjekte sind dokumentiert hier.

Ein weiteres wichtiges Konzept zu verstehen, ist die Idee der Entitätsgruppen. Entities in einer Entität Gruppen werden auf demselben Knoten gespeichert sind, und daher können sie gespeichert werden und effizienter abgerufen werden. Sie sind auch entscheidend für Transaktionen verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top