我有两个点和chantiers表,它们之间是belongsTo关系,我想显示chantiers的名称和我尝试过的每个chantier的销售量之和,但是它给了我错误。
$dataP = DB::table('chantiers')
->leftJoin('pointages','pointages.chantier_id','chantiers.id')
->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier')
->groupBy('pointages.chantier_id')
->get();点表

chantiers表

误差

发布于 2020-03-18 02:10:49
您的mysql版本是5.7+,所以请检查这个参考文献。
MySQL 5.7.5和up实现了功能依赖的检测。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下是此模式),则MySQL拒绝其选择列表的查询。
解决方案1:
检查config/database.php,如果您的mysql配置strict => true,您需要禁用ONLY_FULL_GROUP_BY,添加modes如下:
'mysql' => [
'driver' => 'mysql',
...
'strict' => true,
'engine' => null,
'modes' => [
//'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_AUTO_CREATE_USER',
'NO_ENGINE_SUBSTITUTION'
],
],PS: set strict => false也可以工作,但是禁用它会使你的应用程序不安全。
解决方案2:
使用价值
当启用ONLY_FULL_GROUP_BY SQL模式时,此函数对于按查询分组非常有用,对于MySQL拒绝您知道由于MySQL无法确定的原因而有效的查询的情况也很有用。函数返回值和类型与其参数的返回值和类型相同,但函数结果没有检查ONLY_FULL_GROUP_BY SQL模式。
$dataP = DB::table('chantiers')
->leftJoin('pointages','pointages.chantier_id','chantiers.id')
->selectRaw('COALESCE(SUM(pointages.sold),0) AS sold, ANY_VALUE(chantiers.chantier) AS chantier, pointages.chantier_id')
->groupBy('pointages.chantier_id')
->get();PS:ANY_VALUE不存在于MariaDB上。
发布于 2020-03-17 19:35:34
仅在select字段上按可能分组
根据上面的查询,您不会在select字段中添加一个字段的组,这是Laravel给出错误的原因。
所以,你能不能试试下面哪个对你有用?
$dataP = DB::table('chantiers')
->leftJoin('pointages','pointages.chantier_id','chantiers.id')
->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier,pointages.chantier_id')
->groupBy('pointages.chantier_id')
->get();希望你得到你想要的答案
发布于 2020-03-18 04:50:27
在数据库sql中运行此命令
SET GLOBAL sql_mode='';https://stackoverflow.com/questions/60727473
复制相似问题