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);
Другие вопросы по тегам