Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет. Никак в документации не могу найти решение по поводу внешнего объединения. Допустим есть 2 сущности, со связью ManyToMany:
Class Foo extends Model
{
public function bars()
{
return $this->belongsToMany(Bar::class);
}
}
Class Bar extends Model
{
public function foos()
{
return $this->belongsToMany(Foo::class);
}
}
Данный запрос делает внутреннее объединение:
App\Foo::find(1)->bars()->get();
Можно ли используя отношения в Eloquent сделать такого типа запрос?
SELECT * FROM foos f LEFT JOIN bar_foo bf ON bf.foo_id = f.id WHERE f.id = 1;
Не в сети
Используя отношения, описанные в моделях — нет. На их основе генерятся вторичные самостоятельные запросы, а не джойны.
Но ты можешь буквально написать
Foo::select(...)
->leftJoin('foo_bar',...)
->leftJoin('bar',...)
->get()
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Я так понимаю, большого смысла работать с отношениями в Eloquent нет. Разве что некоторые запросы будут короче и для информативности в моделях указывать связи?
Не в сети
Отношения это удобно. Не всегда нужна супер-эффективность запросов, а вот простота и понятность, удобство поддержки кода важны всегда.
Если шире смотреть, фреймворки вообще создаются для того, чтобы типовые задачи решать просто и быстро. Отношения надо рассматривать не в противовес SQL, а как важный кирпичик в здании фреймворка Я считаю если твои данные в БД находятся в отношениях, то описать их через has*/belongsTo* это просто must have. Чтобы было понятно.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1