Данные в 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
после того, как вы исправите это, оно должно работать:)