CakePHP 2.1 - Сохранение (и создание) нескольких моделей соединения и связанных с ними моделей
Мои модельные отношения таковы:
Student hasMany ClassStudent
Class hasMany ClassStudent
ClassStudent belongsTo Student
ClassStudent belongsTo Class
ClassStudent is a join model.
Я хочу создать учеников, использовать существующий класс или создать новый, а также создать запись модели соединения, которая связывает учеников и классы.
Я хочу сделать все это одним вызовом, чтобы сохранить (если это вообще возможно).
Я пытался:
$data = array(
'Student' => array(
'0' => array( ... ), // Data in here
'1' => array( ... ),
...,
'n' => array( ... )
),
'Class' => array(
'class_id' => x // The class that I want the above students to be associated with
)
)
Я хочу создать n записей о студентах и добавить их в класс (возможно, создавая класс в то же время, если пользователи захотят добавить новый). Я также хочу создать запись модели соединения для каждого учащегося в классе при создании записей учащегося.
Это возможно? Я использую Cake 2.1.0 (сегодняшний стабильный выпуск) и пробовал разные типы saveAll (saveAssociated и saveMany) с $options['deep'] = true.
Возможно ли, что мой массив данных не в правильном формате?
РЕДАКТИРОВАТЬ: Я также пытался:
$data = array(
'ClassStudent' => array(
'0' => array(
'Student' => array (...), // Data
'Class' => array(id => x) // The id of the Class the Student should be associated to
...,
'n' => array(
'Student' => array(...), // n-th Student
'Class' => array(id => x)
)
);
$this->saveAll($data['ClassStudent'], array('deep' => true));
В приведенном выше случае он успешно создает новые записи учеников в таблице учеников, но в соединительной таблице ничего не создается.
1 ответ
saveAll (saveAll - это оболочка для saveMany и saveAssociated) - это правильный инструмент для работы. Взгляните на документацию по saveAll, я не вижу каких-либо заметок об изменении версии 2.1. Потратив больше времени на чтение, вот несколько мыслей
Во-первых, есть ли тип в вашей структуре массива. У тебя есть
'Class' => array ( 'class_id' => x )
Если класс уже определен, и вы просто хотите добавить ученика, то это будет
'ClassStudent' => array( 'class_id' => x )
С учетом вышесказанного CakesPHP ORM должен позволять вам использовать saveAll с hasMany с использованием числового индекса, поэтому, если предположить, что у вас есть опечатка, последующие действия могут работать для вас.
$data = array(
'Student' => array(
'0' => array( ... ), // Data in here
'1' => array( ... ),
...,
'n' => array( ... )
),
'ClassStudent' => array(
'class_id' => x // The class that I want the above students to be associated with
)
)
$this->ClassStudent->saveAll($data);