Как правильно сохранять отношения в 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
197 +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 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир