使用查询生成器laravel时sql不在GROUP BY中

时间:2018-07-16 16:42:49

标签: mysql laravel

enter image description here 我想根据从表投票中获取的product_id来获取多少数据。在laravel上,此查询无法正常运行,但是当我在mysql中尝试运行时,它运行正常吗,是否还有其他解决方案?

这是通过mysql成功执行的查询:

select count(product_id) as total, `v`.*, `p`.`name` from `votes` as `v` left join `products` as `p` on `p`.`id` = (select p1.id from products as p1 where v.product_id = p1.id ) group by v.product_id

结果: enter image description here

这是我使用查询生成器使用的关于laravel的查询:

$count = DB::table('votes as v')->leftJoin('products as p',function($join){
  $join->on('p.id','=',DB::raw('(select p1.id from products as p1 where v.product_id = p1.id )'));
})->select(DB::raw('count(*) as total'),'v.*','p.name')->groupBy('v.product_id')->get();
dd($count);

我收到此错误:

  

“ SQLSTATE [42000]:语法错误或访问冲突:1055   'lookbubbledrink.v.id'不在GROUP BY中(SQL:select count()as   v中的pnamevotes的左边是vproducts则是p   p上的idv =(从产品中选择p1.id作为p1,其中v.product_id   = p1.id)按product_id分组。<property name="whereClause"> <value> <![CDATA[ WHERE customerNumber >= :fromId AND customerNumber <= :toId ]]> </value> </property>

我只需要使用product_id分组来根据投票中product_id的数量计算多少数据。

1 个答案:

答案 0 :(得分:5)

您在laravel中使用严格模式。您可以根据自己的需要进行调整。

在设置config/database.php中进入strict=>false,您就可以参加了。

  'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],