Как правильно сохранять отношения в 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) ?
В 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 через соответствующие отношения.
Надеюсь, это поможет вам сделать ваш код более красивым и элегантным.
В 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 через соответствующие отношения.
Надеюсь, это поможет вам сделать ваш код более красивым и элегантным.