如何将SQL查询转换为雄辩的Laravel

时间:2019-12-07 07:16:57

标签: mysql laravel eloquent

MY SQL查询: SELECT * ,COUNT(posts_id) as `view `FROM `post_view` JOIN posts ON post_view.posts_id = posts.id GROUP BY posts_id 我雄辩的Laravel:

$this->model->Join('posts','post_view.posts_id', '=', 'posts.id')
          ->selectRaw('*, count(posts_id) as view')
          ->groupBy('posts_id')
          ->get();

通过邮递员获取时出错:

SQLSTATE[42000]: Syntax error or access violation: 1055 'databasePost.post_view.id' isn't in GROUP BY
        (SQL: select *, count(posts_id) as view from `post_view` inner join `posts` on `post_view`.`posts_id` =
        `posts`.`id` group by `posts_id`)

1 个答案:

答案 0 :(得分:2)

发生此错误是因为group by要求所有列,这是查询的速度。

我认为您使用的MySQL服务器版本为5.7.5+。 检查一下:MySQL Handling of GROUP BY

方法1:

使用ANY_VALUE到列或禁用mysql模式:ONLY_FULL_GROUP_BY.

->selectRaw('ANY_VALUE(post_view.id), ... count(posts_id) as view')
          ->groupBy('posts_id')

PS:post_view.idposts.id都命名为id,请全选它们,以使其中的一个被覆盖。

方法2:

编辑应用程序的数据库配置文件config/database.php

在mysql数组中,设置strict => false以禁用MySQL的严格模式:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            ...
            'strict' => false,
        ],