Как правильно сохранить модель в Laravel?

Есть 2 связанные таблицы - например posts и comments. К посту я добавлю комментарий. То есть я могу записать коммент 2мя способами - либо сразу передать значения в модель комментария и сохранить
$comment = new Comment($data);
$comment->save();

либо сделать то же самое через модель поста
$comment = new Comment($data);
$post = Book::find($data['post_id']);
$post->comments()->save($comment);


Второй вариант взят из урока, я не понял зачем так делается если можно по первому простому варианту.

PS. Во втором варианте есть смысл если нам нужны данные из модели Post. Но в моем случае они не нужны, зачем же делать лишний запрос?
  • Вопрос задан
  • 2157 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Если вы следуете методологии REST, то у вас post_id не в $data, а прямо в URL.
И тогда метод контроллера будет выглядеть примерно так:
public function save(Post $post, Request $request) {
  $fields = $request->only(['field', 'other_field']);
  $post->comments()->save($fields);
}

Согласитесь, такой код гораздо проще читать? Самое главное в комментарии - это его связь с какой-то сущностью, даже не содержимое. Комментария не может быть без поста, поэтому и плясать нужно от поста.

Первый способ - процедурный. Связь между сущностями описана в "магическом" поле в каком-то массиве. Он имеет право на существование в каких-то технических консольных скриптах, например (и то не всегда).
Второй - объектно-ориентированный и легче читается. Этот код очень хорошо коррелирует с методологией REST, когда мы оперируем сущностями, а не массивами и абстрактными объектами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы