سؤال

أنا باستخدام جدا الجوهرية قاعدة البيانات مع للكيك التطبيق حتى الآن نماذج متعددة الآراء و التحكم تعمل بشكل جيد.لدي المفرد الجدول (Entity) أن يكون ذلك في id على العديد من الجداول الأخرى الأجنبية الرئيسية entity_id

بعض الجداول هي واحدة العلاقات (مثل Company هو واحد Entity) و بعض هي واحدة من العديد من (Entity يمكن أن يكون العديد من Addresses) وهلم جرا.

لن/لا يمكن تغيير قاعدة بيانات نموذج, لذلك هذا هو الهيكل.

لقد تم استخدام saveAll() لحفظ البيانات في هذه الجداول مع إدخال أسماء مثل:

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

و حفظ جميع يفعل كل العمل الشاق, BEGIN TRANSACTION, كل INSERTs نهائيا COMMIT ...

ولكن الآن لقد خلق EntityCategory أن ن أن ن العلاقة وخلق كامل HABTM العلاقة داخل النموذج.

يعمل عندما save() ولكن فقط HABTM علاقة ، فإنه يحفظ كل شيء عندما استخدم saveAll() (تماما كما كان من قبل) باستثناء HABTM علاقة.

أنا في عداد المفقودين شيئا ؟ كيف جعل هذا العمل بشكل صحيح ؟ أنا باستخدام التعليمات البرمجية التالية اليوم:

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

على saveAll() يحفظ جميع البيانات في عدة جداول ، يحفظ الهوية في Entity->id و save() يحفظ HABTM العلاقات, ولكن لست متأكدا إذا كان صحيحا أو إذا كان يمكن أن تجلب لي المشاكل إذا قمت بتغيير بعض هيكل/نموذج.

هذا هو أفضل طريقة لاستخدامه ؟ هل هناك الصحيح طريقة لحفظ أن العلاقات داخل للكيك ?ما الخبرة/المعرفة يمكن أن تقول لي ؟

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

المحلول

هذا هو ثابت إذا كنت تحميل ليلا.

كن حذرا على الرغم من أي شيء آخر قد كسر.

نصائح أخرى

المشكلة مع saveAll() و HABTM الجمعيات هو معروف يتوفر cakephp المسألة, و لم يتم البت 1.2 RC2.

كما fas كما أفضل راغبا في إنقاذ ذات الصلة نموذج البيانات المثل ، وفقا يتوفر cakephp كتاب الطبخ:

"عند العمل مع النماذج المرتبطة ، من المهم أن ندرك أن توفير نموذج البيانات ينبغي دائما أن يتم عن طريق المقابلة للكيك نموذج.إذا كنت تقوم بحفظ وظيفة جديدة وما يرتبط به من تعليقات ، ثم يمكنك استخدام كل وظيفة التعليق نماذج أثناء عملية الحفظ."

ومع ذلك ، باستخدام saveAll() وحفظ() يجب أن تعمل ، IMHO هو أكثر مرونة/عام الحل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top