Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Упростил реальную задачу из жизни, выкинув ненужные связи и свёл до двух таблиц.
Есть 2 таблицы: carriers и vehicles. carriers - главная, vehicles соподчинённая, соединены отношением один ко многим.
Поля в carriers: id, name, user_id (внешний ключ на третью страницу). Поля в vehicles: id, name, carrier_id
Мне нужно получить их произведение.
В SQL делаю запрос:
select
v.*, c.name as carrier_name
from
vehicles v
join
carriers c on c.id = v.carrier_id
where
c.user_id = 2
order by c.name, v.id
На выходе 9 штук.
Переписать код в Query Bilder я могу, но не вижу смысла.
Интересует, как подобные объединения получать в ORM?
Я пытался сделать вот так:
$vehicle-> Vehicle::with(['carrier'=>function(BelongsTo $query){
$query->where('user_id', '=', '1');
Ъ])
->orderBy('id')->get();
Но в результате я получаю все записи из таблицы vehicles. Как ограничить выборку только теми значениями, что мне нужны?
Спасибо!
Не в сети
Пиши́те почти также как на сыром SQL:
$vehicles = Vehicle::join('carriers as c', 'c.id', '=', 'vehicles.carrier_id')
->where('c.user_id', '=', '1');
->orderBy('c.name')
->orderBy('vehicles.id')
->select('vehicles.*', 'c.name as carrier_name')
->get();
Eloquent это конечно ORM, но слабенький
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Да с сырым SQL понятно, хочется просто разобраться с этим зверем. В общем-то я задачу решил, причём двумя способами. Первый оказался клуджем. Работает, но в теории не должен Второй сделал точно по теории, но всё-таки пришлось использовать join. Я хотел попрактиковать именно отказ от джойнов, но, оказывается, не для всех задач это возможно.
Не в сети