Laravel - два или более псевдонима к одной таблице в построителе запросов - PullRequest
1 голос
/ 05 апреля 2019

Мне нужно реплицировать запрос SQL в Laravel с помощью построителя запросов, но я не знаю, как определить более одного псевдонима для одной и той же таблицы.

У меня этот SQL запрос работает нормально.

select b.url as url, b.id as id
from item a, item b
where a.type = 'big'
AND a.published = 1
AND b.parent_id = a.id
AND b.published = 1

Это попытка Laravel:

$query = DB::table('item as a, item as b');
$query->where('a.type', '=', 'big');
$query->where('a.published', '=', 1);
$query->where('b.parent_id', '=', 'a.id');
$query->where('b.published', '=', 1);

Я также пытаюсь:

$query = DB::table('item');
$query->fromRaw('item a, item b');
$query->where('a.type', '=', 'big');
$query->where('a.published', '=', 1);
$query->where('b.parent_id', '=', 'a.id');
$query->where('b.published', '=', 1);

Мне нужно использовать построитель запросов, потому что на следующих шагах мне нужны некоторые условия, поэтому я не могу использовать простое отношение hasMany.

Обновление с помощью items данных таблицы:

Items table

1 Ответ

4 голосов
/ 05 апреля 2019

# Необработанные выражения

Иногда вам может понадобиться использовать необработанное выражение в запросе.Эти выражения будут вставлены в запрос в виде строк, поэтому будьте осторожны, чтобы не создавать точек SQL-инъекций!Для создания необработанного выражения вы можете использовать метод DB::raw:

https://laravel.com/docs/4.2/queries#raw-expressions

$query = DB::table(DB::raw('item as a, item as b'))
              ->where('a.type', '=', 'big')
              ->where('a.published','=',1)
              ->where('b.parent_id','=', DB::raw('a.id'))
              ->select('b.url','b.id')
              ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...