سؤال

أقوم بإنشاء ارتباطات متعددة دفعة واحدة وهناك بعض المشكلات عندما يتعلق الأمر بالادخار.

لدي الكود التالي:

<?php
foreach($userData as $user) {
    $data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
    $this->User->save($data);
}
?>

لقد جربت تنسيق مجموعة البيانات بطرق مختلفة على الرغم من أنني أواجه دائمًا نفس المشكلات.إما أن يتم نقل الإدخالات السابقة عند إدراج إدخال جديد أو يتم تحديث الإدخال الحالي.

يمكنني فقط استخدام ما يلي على الرغم من أنني بحاجة إلى سلوك لتشغيله.

$this->User->SiteUser->save($data);

يحرر:أيضًا $this->User->create();لا يبدو أن تفعل الكثير.

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

المحلول

ساعدت لجنة الإنقاذ الدولية في اكتشاف الخطأ، بمجرد حدوث ذلك فريد تم ضبط المفتاح على خطأ شنيع كان كل شيء قادرًا على الحفظ بشكل صحيح.

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);

نصائح أخرى

وحاول إعادة تعيين id قبل save() جديدة، ربما على كلا النموذجين:

$this->User->id = null;

والكيك تقرر ما إذا كنت تريد تحديث أو إدراج إدخالات على أساس id مجموعة، ويحدد save() على id تلقائيا. لا يدري لماذا create() لا يعتني هذا بالنسبة لك.

وأيضا، إذا كنت تريد حفظ البيانات HABTM، يجب أن الحاجة إلى استخدام saveAll() بدلا من save(). انظر أيضا هذا السؤال .

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