Сохранить данные в 2 таблицы cakephp 3

Я очень новичок в Cakephp 3. Я пытаюсь сделать функцию saveAll в Cakephp 3, но безуспешно.

У меня есть 2 таблицы: продавцы и пользователи

Отношения между этими двумя таблицами, как показано ниже:

У пользователей много продавцов, продавцы принадлежат пользователям

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

Может ли кто-нибудь помочь мне, как вставить данные в 2 разные таблицы из 1 формы с помощью Cakephp 3?

Мой код, как показано ниже:

 <?= $this->Form->create($merchant); ?>
<fieldset>
    <legend><?= __('Add Merchant') ?></legend>
    <?php
        echo $this->Form->input('User.id');
        echo $this->Form->input('User.username');
        echo $this->Form->input('User.password');
        echo $this->Form->input('merchant_type_id', ['options' => $merchantTypes]);
        echo $this->Form->input('name');
        echo $this->Form->input('identity_number');
        echo $this->Form->input('phone_number');
    ?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>

Контроллер:

public function registration()
{
    $merchant = $this->Merchants->newEntity();
    if ($this->request->is('post')) {
        $merchant = $this->Merchants->patchEntity($merchant, $this->request->data, [
            'associated' => ['Users']
        ]);
        if ($this->Merchants->saveAll($merchant)) {
            $this->Flash->success('The merchant has been saved.');
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error('The merchant could not be saved. Please, try again.');
        }
    }
    $users = $this->Merchants->Users->find('list', ['limit' => 200]);
    $merchantTypes = $this->Merchants->MerchantTypes->find('list', ['limit' => 200]);
    $this->set(compact('merchant', 'users', 'merchantTypes'));
}

Ваша помощь очень ценится. Спасибо.


person batrisya    schedule 02.03.2015    source источник
comment
Каковы отношения между продавцами и пользователями? Чтобы saveAll работало, модели должны быть связаны, поэтому вам нужен Merchant hasMany User или Merchant hasAndBelongsToMany User или наоборот.   -  person Simon Mason    schedule 02.03.2015
comment
В CakePHP 3 нет saveAll(). book.cakephp.org /3.0/ru/orm/saving-data.html   -  person ndm    schedule 02.03.2015
comment
привет @ndm, да, я прочитал документацию. Есть ли у нас другой способ сохранить данные в 2 разные таблицы? Я попытался поставить '$merchant = $this-›Merchants-›patchEntity($merchant, $this-›request-›data, [ 'associated' =› ['Users'] ]); но безуспешно.   -  person batrisya    schedule 02.03.2015
comment
привет @SimonMason, я обновил отношения в своем вопросе выше. Да, таблица получила отношения.   -  person batrisya    schedule 02.03.2015
comment
Привет @Debasis, я обновил код в своем вопросе.   -  person batrisya    schedule 02.03.2015
comment
Используйте save() вместо saveAll().   -  person Supravat Mondal    schedule 02.03.2015
comment
привет @ u2460470 я пытался использовать save (), saveAll (), saveAssociate () .. он будет обновляться только в одной таблице ..   -  person batrisya    schedule 03.03.2015
comment
oky @batrisya, можешь описать структуру своей таблицы?   -  person Supravat Mondal    schedule 03.03.2015


Ответы (2)


Я думаю, ваша проблема в том, что ваши поля не названы версией имени ассоциации с нижним подчеркиванием.

Вместо поставить:

echo $this->Form->input('User.username')

Что приведет к:

<input type="text" name="User[username]" >

Вы должны попытаться поставить что-то вроде:

echo $this->Form->input('user.username');

Что приведет к:

<input type="text" name="user[username]" >

надеюсь будет полезно :)

PS: Извините, если есть грамматические ошибки, но английский не мой родной язык ;)

person amandasantanati    schedule 03.06.2015
comment
я сталкиваюсь с той же проблемой много дней, большое спасибо, у меня есть еще одна проблема, чтобы сохранить запись в нескольких таблицах, если вы можете мне помочь, я очень благодарен вам на самом деле перед сохранением, я просто хочу запустить проверку из обеих моделей, но не знаю, что это будет сделано, например. у меня есть таблица пользователей и сотрудников таблица сотрудников имеет поле user_id user has_one сотрудник и сотрудник теперь принадлежат пользователю, когда я сохраняю данные, чем сохраняю их в обоих полях с уважаемым идентификатором пользователя, но не запускаю проверку, просто сохраняю данные, как будто они уникальны в пользовательской таблице и состояние не пусто и т. д. пожалуйста, не могли бы вы помочь мне, спасибо - person Deepak Goyal; 19.12.2015

Пожалуйста, следуйте документации по сохранению данных:

http://book.cakephp.org/3.0/en/orm/saving-data.html

Если вы переходите с 2.x, прочитайте руководство по миграции ORM, оно должно ответить на большинство ваших вопросов:

http://book.cakephp.org/3.0/en/appendices/orm-migration.html

person José Lorenzo Rodríguez    schedule 03.03.2015