Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 19.03.2016 03:15:04

Max_G
Откуда: Одесса, Украина
Сообщений: 55

Снова вложенный селект

Как в ларавел вложить один селект в другой?
Зачем? Два раза нужно group by делать.

$query2->groupBy('products.id', 'parameters.id')->toSql();

$query = \DB::table(\DB::raw('(' .$query2 . ') as t'))
            ->select(\DB::raw('count(*) as count, *'))
            ->groupBy('id')
            ->having('count', '=', count($parameters))
            ->get();

На это мне справедливо пишет:
Object of class Illuminate\Database\Eloquent\Builder could not be converted to string

А как и чем слепить их?

Нужно так:

select *, count(*) as count from ($query2 as t) ...

Не в сети

#2 19.03.2016 04:43:46

Max_G
Откуда: Одесса, Украина
Сообщений: 55

Re: Снова вложенный селект

$query = \DB::table(\DB::raw('(' .$query->toSql() . ') t'))
            ->select(\DB::raw('t.*, count(t.id) count'))
            ->groupBy('t.id')
            ->having('count', '=', count($parameters));
            ->get();

Долго не мог понять, почему путаются парметры и ставятся не в той последовательности, в которой стоят знаки вопроса. Даже менял все выражения на Raw. Сейчас дошло озарение, что лишний параметр ларавел добавляет как раз для вставки $query->toSql(). И знак вопроса, даже если всё заменить на Raw, одиноко красуется в конце запроса, а параметр для него не находится.

Поэтому снова вопрос, как этот долбаный селект вставлять синтаксически правильно. Я почти у цели.

Не в сети

#3 19.03.2016 10:18:31

Max_G
Откуда: Одесса, Украина
Сообщений: 55

Re: Снова вложенный селект

Если убрать из конструкции
->having('count', '=', count($parameters))
то и лишний знак вопроса в конце запроса пропадает.
Причём даже если ->having(\DB::raw('`count` = ' . count($parameters))) - знак вопроса всё равно добавляется.
Что за ошибка и почему?

Не в сети

Подвал раздела