Как правильно сохранять отношения в Yii2? есть обычная зависимость между таблицами comment, post, user
вот так добавляется новый комментарий , на бэкэндеprotected function newComment($post) {
$model = new Comment();
if ( $model->load( Yii::$app->request->post() ) ) {
$model->user_id = \Yii::$app->user->identity->id;
$model->post_id = $post->id;
$model->date = date('Y-m-d H:i:s');
$model->save();
}
return $model;
}
чувствую я что можно это сделать более красивее, раз связи прописаны. что то типа$comment->setPost($post);
$comment->setUser($user);
как можно обойти все эти прямые обращения к полям ($model->user_id, $model->post_id) ?

21 Авг 2019 в 07:06
219 +1
0
Ответы
1

В Yii2 можно использовать методы, которые автоматически заполнят связанные модели. Для этого нужно правильно настроить отношения между моделями Comment, Post и User.

Прежде всего, убедитесь, что у модели Comment есть методы для описания отношений:

public function getUser()
{
return $this->hasOne(User::class, ['id' => 'user_id']);
}
public function getPost()
{
return $this->hasOne(Post::class, ['id' => 'post_id']);
}

Теперь при создании нового комментария вам нужно будет указать связанные модели, а не прямо задавать id пользователся и поста:

protected function newComment($post) {
$model = new Comment();
if ( $model->load( Yii::$app->request->post() ) ) {
$model->user = \Yii::$app->user->identity;
$model->post = $post;
$model->date = date('Y-m-d H:i:s');
$model->save();
}
return $model;
}

Теперь при сохранении нового комментария Yii2 автоматически настроит связанные объекты User и Post через соответствующие отношения.

Надеюсь, это поможет вам сделать ваш код более красивым и элегантным.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир