Данные в CakePHP 3.x не сохраняются при сохранении данных в 2 таблицы со многими связями

Данные в CakePHP 3.x не сохраняются при сохранении данных в 2 таблицы со многими связями

У меня есть две таблицы статей и комментариев, у комментариев есть поле article_id, связь между ними us article hasMany Комментарии и Comment принадлежит Article, у меня есть следующий код в моем файле article / add.ctp view file

<?php
    $this->Form->create($article)
    echo $this->Form->input('title');
    echo $this->Form->input('status');
    echo $this->Form->input('comments.0.title');
    echo $this->Form->input('comments.0.description');
    $this->Form->end()
?>

Это код моего контроллера

public function add() {

    $article = $this->Articles->newEntity();

    if ($this->request->is('post')) {
        $article =  $this->Articles->patchEntity($article, $this->request->data, [
                        'associated' => ['Commments']
                    ]);
        if ($this->Articles->save($article)) {
            $this->Flash->success(__('The article has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The article could not be saved. Please, try again.'));
        }
    }
    $this->set(compact('article'));
    $this->set('_serialize', ['article']);
}

Это моя статья модель

<?php
    class ArticlesTable extends Table {
        public function initialize(array $config) {
            parent::initialize($config);
            $this->table('articles');
            $this->displayField('title');
            $this->primaryKey('id');
            $this->addBehavior('Timestamp');
            $this->hasMany('Comments', [
                'foreignKey' => 'article_id'
            ]);
        }
    }

?>

Это моя модель комментариев

<?php
    class CommentsTable extends Table {
        public function initialize(array $config) {

            parent::initialize($config);
            $this->table('comments');
            $this->displayField('id');
            $this->primaryKey('id');

            $this->addBehavior('Timestamp');

            $this->belongsTo('Articles', [
                'foreignKey' => 'article_id',
                'joinType' => 'INNER'
            ]);
        }
    }
?>

и когда я печатаю объект $ article после патча, чем показанный ниже массив, он не создает объект модели комментария, он создает простой массив под объектом модели article

App\Model\Entity\Article Object
(
    [title] => Article1
    [status] => 1
    [comments] => Array
    (
        [0] => Array
            (
                [title] => Article 1 Comment 1
                [description] => mnftrduio
            )

    )

[[new]] => 1
[[accessible]] => Array
    (
        [*] => 1
    )

[[dirty]] => Array
    (
        [title] => 1
        [status] => 1
        [comments] => 1
    )

Но данные сохраняются только в таблице статей, а не в таблице комментариев.

1 ответ

Решение

Ничего плохого в вашем коде, просто пропущены некоторые комментарии echo, точка с запятой и опечатка с тройным 'm'

$this->Form->create($article) //missing echo and semicolon;
echo $this->Form->create($article); //the correct one


$this->Form->end() //missing submit button

echo $this->Form->button(__('Submit')); //the correct one
echo $this->Form->end(); //the correct one


$article =  $this->Articles->patchEntity($article, $this->request->data, [
                    'associated' => ['Commments']
                ]); //mistype comments with triple "m" 

$article =  $this->Articles->patchEntity($article, $this->request->data, [
                    'associated' => ['Comments']
                ]);// the correct one

после того, как вы исправите это, оно должно работать:)

Другие вопросы по тегам