CakePHP 2.1 - Сохранение (и создание) нескольких моделей соединения и связанных с ними моделей - PullRequest
0 голосов
/ 06 марта 2012

Моя модель отношений выглядит следующим образом:

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 Ответ

0 голосов
/ 06 марта 2012

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...