Обновление: Удалено 0 из ввода формы и s с сеанса, а также изменение отношений с Booking hasMany Sessions to Booking hasOne Session.CakePHP 3 сохранение связанных данных по 2 таблицам
Так что у меня 4 таблицы, относящиеся к этому:
- заказа (где форма с полями ввода от)
- Сессии (связанный с Bookings)
- Sessionplayers_sessions (присоединяемой таблицы между Sessionplayers & Сессии)
- Sessionplayers
При использовании моей формы, я Невозможно сохранить в книгах, Сессии & Sessionplayer_sessions. Форма ввод ниже единственное значимое поле для Sessionplayer_sessions:
<?php echo $this->Form->input('session.sessionplayers._ids', ['type' => 'select', 'options'=>'','multiple']); ?>
опция в виде входного шоу, как пустое, приходит из двойного списка JQuery скрипта, который позволяет для выбора нескольких элементов.
Однако, когда я пытаюсь сохранить, ничто из приведенного выше ввода фактически не отправляется в таблицу Sessionplayer_sessions, а все в книгах & Сессии успешно опубликованы.
В контроллере, это то, что patchEntity разделы newEntity & выглядеть следующим образом:
$booking = $this->Bookings->newEntity($this->request->data(),[
'associated'=>[
'Sessions' => ['associated' => ['Guestengineers', 'Sessionplayers']]
]]);
if($this->request->is('post')){
$data = $this->request->data;
$booking = $this->Bookings->patchEntity($booking, $data, [
'associated'=>[
'Sessions' => ['associated' => ['Guestengineers', 'Sessionplayers']]
]
]);
И соответствующие модели и сессии и Sessionplayers таблица:
Sessions:
public function initialize(array $config)
{
parent::initialize($config);
$this->table('sessions');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongstoMany('Sessionplayers', [
'foreignKey' => 'session_id',
'targetForeignKey' => 'sessionplayer_id',
'joinTable' => 'Sessionplayers_sessions'
]);
}
Ученики:
public function initialize(array $config)
{
parent::initialize($config);
$this->table('sessionplayers');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongstoMany('Sessions', [
'foreignKey' => 'sessionplayer_id',
'targetForeignKey' => 'session_id',
'joinTable' => 'Sessionplayers_sessions'
]);
}
Результаты:
при обновлении формы ввода и отношения между таблицей Заказы & сессий и повторной:
В почтовых данных, sessionplayers теперь массив внутри массива сеанса. Внутри массива sessionplayers есть один атрибут: _ids, со значением, ссылающимся на идентификатор первого сеансового игрока, который был выбран во множественном выборе ввода формы, например, если я выбрал третьего сеансового игрока и 4-го сеансового игрока, _ids = 3. Однако , в самой базе данных, в то время как данные таблицы заказов и сеансов были успешно вставлены, таблица sessionplayers_session не выполнялась.
В основном: массивы данных запроса следующим образом: Session (массив) -> Sessionplayers (массив) -> _ids = 3.
В журнале SQL, только два заявления вставить в SQL произошло, один для Бронирования и один для сеансов. У Sessionplayers_sessions не было такой вставки.
«0» выглядит неуместным. Предполагается, что волшебный ключ '_ids' напрямую связан с именем свойства ассоциации. Кроме того, всегда старайтесь сделать небольшую отладку, поскольку вопросы, которые в основном просто «не работают», обычно считаются оффтопическими. В вашем случае, вероятно, наиболее актуальным является проверка того, какие именно данные запроса и исправленный объект выглядят в вашем контроллере. – ndm
О, я сделал это. При отправке в запросе атрибуты таблицы соединений не присутствовали в данных сообщения. Я также попробовал вариант «Поваренная книга» для многих и многих ассоциаций, но не было никакой разницы. Когда вы говорите, что 0 является неуместным, где 0 обычно означает идти относительно связанных таблиц? – mistaq
Я не просто хотел сказать _do некоторую отладку, но особенно мнение, что результаты должны быть в вашем вопросе. Я бы сказал, что '0' вообще не должно быть в вашем случае, ключ' _ids' должен быть напрямую связан с 'sessionplayers'. Проверьте примеры в документах: ** https: //book.cakephp.org/3.0/en/orm/saving-data.html#converting-belongstomany-data** – ndm