Laravel DB:select() 需要 group by 中的所有列

Tig*_*ger 3 php mariadb laravel eloquent

我需要运行一个自定义查询,我已经尝试了所有这些方法

$sql = "SELECT acd.*, DATE_FORMAT(acd.cdate, '%d/%m/%Y') cdate_disp,
  GROUP_CONCAT(CONCAT_WS(', ', car.type, car.session, crd.name) SEPARATOR '<br />') rd_names,
  acb.booking_status my_booking_status
FROM app_data acd
INNER JOIN crmaccounts ca ON ca.id = acd.client_crm_id
LEFT JOIN crmaccount_rdids car ON car.account_id = ca.id
LEFT JOIN crmrd_ids crd ON crd.id = car.rd_id
LEFT JOIN app_bookings acb ON acb.call_ref_id = acd.call_ref AND acb.user_id = 12391
WHERE 1=1 
AND acd.client_crm_id NOT IN (select account_id from bstaff WHERE user_id=12391)
GROUP BY acd.id
ORDER BY acd.cdate, ctiming";

DB:select($sql);
Run Code Online (Sandbox Code Playgroud)

投掷

Illuminate \ Database \ QueryException (42000) SQLSTATE[42000]: 语法错误或访问冲突:1055 'mydatabase.acd.call_ref' 不在 GROUP BY (SQL: ....)

DB::select($sql);

DB::raw($sql);

DB::select(DB::raw($sql));

//even with pdo 
$sth = DB::getPdo()->prepare($sql);
$sth->execute();
$data = $sth->fetchAll(\PDO::FETCH_OBJ);

 PDOException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1055 'mydatabase.acd.call_ref' isn't in GROUP BY
Run Code Online (Sandbox Code Playgroud)

似乎开始工作的唯一方法是列出group by可行但不方便的所有表列。

我可以直接在 phpmyadmin 中运行相同的查询。所以我不确定为什么当我通过 Laravel 运行它时,它要求我添加所有列。

我安装了 MariaDB,并且 Laravel 和 PhpMyAdmin 都连接到同一个实例。幼虫版本是 5.8.5。

请查看完整查询,因为我在这里也提出了问题,但找不到任何答案 - https://laracasts.com/discuss/channels/eloquent/query-runs-ok-in-phpmyadmin-but-dbselect-throws -例外

dpa*_*oli 11

您应该尝试在config/database.php, in mysql connection 部分禁用严格模式。