Я очень новичок в CakePHP 3. Я хочу обновить / вставить данные таблицы отношений.
У меня есть Articles
в качестве главной таблицы s, а Comments
- связанная таблица, в которой article_id
хранится как внешний ключ.
Кроме того, поскольку я не хочу дублировать комментарий для Article
, я настроил уникальный ключ comment_id_body
В Comments
таблице.
Вот как я определил отношения.
class ArticlesTable extends Table
{
public function initialize(array $config)
{
$this->hasMany('Comments');
}
}
class CommentsTable extends Table
{
public function initialize(array $config)
{
$this->belongsTo('Articles');
}
}
Вот мой код.
$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->get(12);
$article->title = 'CakePHP is THE best PHP framework!';
$firstComment = $articlesTable->Comments->newEntity();
$firstComment->body = 'The CakePHP features are outstanding';
$article->comments = [$firstComment];
$articlesTable->save($article);
Проблема с этим кодом заключается в том, что он всегда пытается вставить новую строку в таблицу Comments
вместо обновления существующей. Поэтому, когда я выполняю код, он выдает ошибку, как показано ниже.
Нарушение ограничения целостности: 1062 Повторяющаяся запись
Я думаю, что приведенная выше ошибка связана с дублированием записи в таблице, так как приведенный выше код пытается вставить новую запись все время, пока в таблице Comments
есть запись с такими же данными.
Я хочу обновить Comments
запись таблицы, и если в таблице Comments
запись не найдена, она автоматически вставит новую запись при сохранении данных, вызвав метод $articlesTable->save($article);
.