Помогите написать SQL запрос на Laravel
Имеется рабочик запрос. не пойму как его можно написать в Laravel, используя его функции
SELECT t1.Id, t1.CreationDate, t1.OwnerDisplayName, t1.Tags, t1.tr_Title, t2.tr_Body
FROM web_posts_questions as t1
LEFT JOIN (
SELECT t3.ParentId, t3.tr_Body
FROM web_posts_answers as t3
WHERE t3.Id = COALESCE((
SELECT t4.Id
FROM web_posts_answers as t4
WHERE t3.ParentId = t4.ParentId
ORDER BY Score DESC
LIMIT 1
OFFSET 2
))
) as t2 ON t1.Id = t2.ParentId
WHERE t1.Id IN (1,2,3,4)
Ответы (1 шт):
Автор решения: Dmitrii Sedov
→ Ссылка
Попробуйте сделать так:
$sub = DB::table('web_posts_answers as t3')
->select(['t3.ParentId', 't3.tr_Body'])
->whereRaw('t3.Id = COALESCE((
SELECT t4.Id
FROM web_posts_answers as t4
WHERE t3.ParentId = t4.ParentId
ORDER BY Score DESC
LIMIT 1
OFFSET 2
))');
DB::table('web_posts_questions as t1')
->select([
't1.id',
't1.CreationDate',
't1.OwnerDisplayName',
't1.Tags',
't1.tr_Title',
't2.tr_Body',
])
->leftJoinSub($sub, 't2', function ($join) {
$join->on('t1.id', '=', 't2.ParentId');
})
->whereIn('t1.id', [1, 2, 3, 4])
->get();
Решение не запускал, так как всю структуру не знаю. Но если вызвать метод ->toSql(), то выдаёт Ваш запрос как вверху.