2017-01-30 4 views
0

Обновление: Удалено 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 не было такой вставки.

+1

«0» выглядит неуместным. Предполагается, что волшебный ключ '_ids' напрямую связан с именем свойства ассоциации. Кроме того, всегда старайтесь сделать небольшую отладку, поскольку вопросы, которые в основном просто «не работают», обычно считаются оффтопическими. В вашем случае, вероятно, наиболее актуальным является проверка того, какие именно данные запроса и исправленный объект выглядят в вашем контроллере. – ndm

+0

О, я сделал это. При отправке в запросе атрибуты таблицы соединений не присутствовали в данных сообщения. Я также попробовал вариант «Поваренная книга» для многих и многих ассоциаций, но не было никакой разницы. Когда вы говорите, что 0 является неуместным, где 0 обычно означает идти относительно связанных таблиц? – mistaq

+0

Я не просто хотел сказать _do некоторую отладку, но особенно мнение, что результаты должны быть в вашем вопросе. Я бы сказал, что '0' вообще не должно быть в вашем случае, ключ' _ids' должен быть напрямую связан с 'sessionplayers'. Проверьте примеры в документах: ** https: //book.cakephp.org/3.0/en/orm/saving-data.html#converting-belongstomany-data** – ndm

ответ

-1

Думаю, мне удалось исправить это после удаления 0 из ввода формы и изменения отношения от OneToMany до OneToOne, добавив в [], чтобы представить, что может быть выбран несколько элементов.

Смежные вопросы