связь таблиц в laravel
Доброго времени суток.
Объясните, пожалуйста, преимущества связи таблиц средствами Eloquent.
В данный момент в моём проекте такая логика (модель orders):
function getClient():clients {
return clients::find($this->client_id);
}
Таким образом (прямое обращение к модели, без "связей") я получаю объект в котором имею все методы определённые в модели clients и IDE может о них подсказывать.
В ORM Eloquent предлагается использовать hasOne, hasMany и пр. , используя их я получаю объект у которого надо вызвать ->get() что бы получить данные и не могу пользоваться подсказками IDE, она просто не знает с каким объектом происходит работа (тип возвращаемого значения у функции приходится удалять). При этом ничто не мешает сделать отдельный метод где-нибудь в сервисах что бы пользоваться блоками ->where для всех таких "связей" с возможностью внедрения своей логики.
Вопрос: какой вариант предпочтительнее и почему?
Ответы (1 шт):
hasOne, hasMany и пр. упрощает работу с отношениями, когда твоя таблица связана с другими таблицами. Например как описано в документации, у тебя есть таблица статей, статьи могут содержать комментарии, и если ты следишь за нормализацией базы данных, а не пихаешь все в одну таблицу, то у тебя будет две таблицы со связью по внешнему ключу. И чтобы не писать join для получения данных со связанной таблицы, ты можешь определить одно из отношений и потом получать данные таким образом:
Post:with('comments')->get()
Все статьи и комментарии к ним в одну строку. Или например ты хочешь получить все комментарии для первой статьи
Post::find(1)->comments();
Но по сути тебя никто не заставляет этим пользоваться, это как одна из фишек Eloquent ORM для упрощения работы запросами.