Google App Engine에서 GQL의 고객을위한 최신 주문을 어떻게 찾아 볼까요?

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

  •  05-09-2019
  •  | 
  •  

문제

두 개의 테이블, 고객 및 주문이 있고 고객을위한 최신 주문을 찾고 싶다면 GQL을 사용하여 Google App Engine에서 어떻게해야합니까?

일반적으로 주문 테이블에 존재하는 외국 키 인 Customer_id를 통해이 두 테이블에 참여합니다.

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의 DataStore는 관계형 데이터베이스와는 상당히 다릅니다. 몇 가지 유사점이 있지만 데이터 모델을 디자인 할 때 차이점을 이해하는 것이 중요합니다.

일반적으로 이러한 종류의 관계를 정의하는 방법은 참조 속성을 사용하는 것입니다.

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

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

Order Entity 정의의 참고 자료는 'Orders'라는 고객 엔티티의 속성을 생성하여 '고객'이 고객 인스턴스 인 경우 'Customer.orders'를 참조하여 모든 주문을 찾을 수 있습니다.

예를 들어:

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