No Google App Engine, como eu iria procurar o último pedido para um cliente em GQL?

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

  •  05-09-2019
  •  | 
  •  

Pergunta

Se eu tiver duas tabelas, clientes e pedidos, e eu quero olhar para cima a última ordem para um cliente, como eu iria fazer isso no Google App Engine usando GQL?

Normalmente, eu iria juntar essas duas tabelas através da chave estrangeira, customer_id, que existe na tabela de pedidos.

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)

No entanto, uma vez que se junta não parece ser possível no Google App Engine, eu não tenho certeza de como contornar essa limitação. Todas as sugestões serão apreciadas.

Foi útil?

Solução

O armazenamento de dados no Google App Engine é realmente muito diferente de um banco de dados relacional. Existem algumas semelhanças, mas é importante compreender as diferenças quando você projetar seu modelo de dados.

A maneira que você normalmente definir esse tipo de relacionamento é usando propriedades de referência:

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

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

O ReferenceProperty nos resultados definição da entidade Order na criação de uma propriedade na entidade Customer, chamados 'ordens', de modo que se 'cliente' é uma instância de cliente, você pode encontrar todas as ordens, referindo-se 'ao cliente. ordens.

Por exemplo:

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
propriedades

Referência são documentados aqui.

Outro conceito importante a entender é a idéia de grupos de entidades. Entidades em uma entidade agrupa são armazenados no mesmo nó, e, portanto, eles podem ser armazenados e recuperados de forma mais eficiente. Eles também são cruciais para o uso de transações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top