CakePHP 3.x - сохранение связанных данных - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь пропатчить Entity с помощью таблицы соединений, но не могу получить ее для сохранения связанных записей, и я думаю, что у меня правильный код бэкэнда, но я не уверен в том, как должен выглядеть код веб-интерфейса. .

Вот сценарий, у меня три таблицы

Таблица ГК

id int
title string

Таблица племен

id int
name string

Таблица LedgersTribes

id int
ledger_id int
tribe_id int

Вот мой код бэкэнда

public function ledgerSave($id = null)
{
    $this->loadModel('Ledgers');

    $ledger = $this->Ledgers->get($id, [
        'contain' => ['LedgersTribes']
    ]);

    if ($this->request->is(['patch', 'post', 'put'])) {
         $ledger = $this->Ledgers->patchEntity($ledger, $this->request->getData(), [
             'associated' => ['LedgersTribes']
         ]);
         if ($this->Ledgers->save($ledger)) {
             $this->Flash->success(__('The ledger has been saved.'));

             return $this->redirect($this->referer());
         }
         $this->Flash->error(__('The ledger could not be saved. Please, try again.'));
    }
    $this->set(compact('ledger'));
}

Вот соответствующий код внешнего интерфейса

<?= $this->Form->control('tribe_id[]', ['type' => 'checkbox', 'label' => false, 'class' => 'minimal', 'value' => $tribe->id]) ?>

У меня вопрос, каким должно быть имя поля для tribe_id, идея в том, что у меня есть список флажков, и пользователь проверяет пару полей, а затем эти tribe_id вставляются в таблицу LedgersTribes с помощью ledger_id

Есть идеи, как мне это сделать?


РЕДАКТИРОВАТЬ: Вот скриншот формы

enter image description here


Я просмотрел следующие ссылки, и ни одна из них не ответила на мой вопрос ...

CakePHP 3: Ошибка сохранения связанной модели

Сохранение связано в CakePHP 3 не работает

Как сохранить связанные данные соединения в cakephp 3.x

CakePHP 3 не может сохранить связанную модель

Cakephp 3 - Сохранить связанную принадлежность ToMany (joinTable)

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Это должно сделать:

echo $this->Form->control('tribes._ids[]', [        
    'type' => 'checkbox', 
    'label' => false, 
    'class' => 'minimal', 
    'value' => $tribe->id]
]);

Это описано здесь: https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data

0 голосов
/ 17 мая 2019

Я думаю, вам нужно получить таблицу (например: TableRegistry :: getTableLocator () -> get ('')), в которую вы хотите сохранить данные.Затем создайте сущность из этого и сохраните данные, надеюсь, это сработает.

...