على Google App Engine، كيف يمكنني البحث عن آخر طلب للعملاء في GQL؟

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

  •  05-09-2019
  •  | 
  •  

سؤال

إذا كان لدي طاولتين وعملاء وأوامرين، وأريد البحث عن آخر طلب للعملاء، فكيف يمكنني القيام بذلك على محرك تطبيق Google باستخدام GQL؟

عادة، أود الانضمام إلى هذين الجداولتين من خلال المفتاح الأجنبي، 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، فأنا لست متأكدا من كيفية العمل حول هذا القيد. سيكون موضع تقدير أي اقتراحات.

هل كانت مفيدة؟

المحلول

يختلف DataStore في مشغل Google App مختلفا تماما عن قاعدة بيانات العلائقية. هناك بعض أوجه التشابه، ولكن من المهم فهم الاختلافات عند تصميم نموذج البيانات لك.

الطريقة التي ستحددها عادة هذا النوع من العلاقة باستخدام الخصائص المرجعية:

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

class Order(db.Model):
   customer = db.ReferenceProperty( Customer,
                                    collection_name = '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