Laravel Вложенный запрос с whereColumn и where

z3r9

Новичок
Подскажите пожалуйста, не получается во вложенном запросе сделать выборку whereColumn и where. Выводит ошибку SQLSTATE[HY093]: Invalid parameter number .

Код:
$table2 = DB::table('table2 as t2')->select(DB::raw('count(*)'))
           ->where('t2.status', '=', 'ok') // <== ВОТ ИЗ ЗА ЭТОГО ОШИБКА
           ->whereColumn('t2.table1_id', 'table1.id');

$table1 = DB::table("table1")
           ->select(DB::raw(...
           ({$table2->toSql()}) as t2,
           ..."));
Причем если сделать $table2 = Table2::select(...) и в $table1 добавить ->mergeBindings($table2->getQuery()), то тогда в $table1 не работает ->where(...). Подскажите в чем причина.
 

jonjonson

Охренеть
Может проще для начала написать SQL запрос, который вы хотите получить?
И ещё у меня есть предположение, что whereColumn скорее всего сравнивает поля только одной таблицы.
 

z3r9

Новичок
Может проще для начала написать SQL запрос, который вы хотите получить?
И ещё у меня есть предположение, что whereColumn скорее всего сравнивает поля только одной таблицы.
Ну так запрос написан:
Код:
 SELECT (SELECT count(*) FROM Table2 WHERE Table2.table1_id = table1.id AND status="ok" ) FROM table1 where  table1.user_id=1
Убираешь
Код:
->where('t2.status', '=', 'ok') // <== ВОТ ИЗ ЗА ЭТОГО ОШИБКА
И запрос выполняется. Вряд ли дело во whereColumn.
 
Последнее редактирование:

jonjonson

Охренеть
Меня ваш SQL запрос смущает.
Например, явно не указано к какой таблице относится поле status.
 

WMix

герр M:)ller
Партнер клуба
Код:
select count(*)
from table1
left join Table2 on Table2.table1_id = table1.id
where table1.user_id=1 and status="ok"
 

jonjonson

Охренеть
@WMix, я то же думал о джоине, но меня смущал селект селектов :)
Ну и это нужно теперь в разрезе ларавель собрать. Правда теперь на много проще.
 

AmdY

Пью пиво
Команда форума
PHP:
Table1::where('user_id', 1)->withCount(['table2' => function($q) { $q->where('status' 'ok'); } ]);
 
  • Like
Реакции: z3r9
Сверху