You can use the DB facade and write the query that works.
Feb 20, 2021
8
Level 2
Error in query but same is working in phpmyadmin query
My laravel code is as below
$portfolio = Portfolio::selectRaw('portfolios.id,portfolios.quantity,(SELECT SUM(pnls.quantity) GROUP BY pnls.portfolio_id) as pnlotal')
->leftJoin('pnls','pnls.portfolio_id','portfolios.id')
->groupBy('portfolios.id')
->get();
The above code giving error as
SQLSTATE[42000]: Syntax error or access violation: 1055 'maindb.portfolios.quantity' isn't in GROUP BY (SQL: select portfolios.id,portfolios.quantity,(SELECT SUM(pnls.quantity) GROUP BY pnls.portfolio_id) as pnlotal from `portfolios` left join `pnls` on `pnls`.`portfolio_id` = `portfolios`.`id` group by `portfolios`.`id`)
To get sql output i used ->toSQL and this output is as below
select portfolios.id,portfolios.quantity,(SELECT SUM(pnls.quantity) GROUP BY pnls.portfolio_id) as pnlotal from `portfolios` left join `pnls` on `pnls`.`portfolio_id` = `portfolios`.`id` group by `portfolios`.`id`
``
When I put the above result to phpmyadmin sql query, it is showing accurate result.
Why Laravel is getting error? What is the solution
Level 2
solved by
DB::statement("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");
$portfolios=DB::select('select codelists.code,portfolios.action,portfolios.commission,portfolios.price,portfolios.date,portfolios.id,portfolios.quantity,(SELECT SUM(pnls.quantity) GROUP BY pnls.portfolio_id) as pnltotal from `portfolios` left join `pnls` on `portfolios`.`id` = `pnls`.`portfolio_id` left join `codelists` on `codelists`.`id`=`portfolios`.`codelist_id` group by `portfolios`.`id` having portfolios.quantity > sum(pnls.quantity)');
DB::statement("SET sql_mode=(SELECT CONCAT(@@sql_mode, ',ONLY_FULL_GROUP_BY'));");
Please or to participate in this conversation.