加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Eloquent group在Laravel 5.3中使用有效的SQL查询生成“S

发布时间:2020-12-14 19:44:40 所属栏目:大数据 来源:网络整理
导读:我对Eloquent有一个奇怪的问题,我正在尝试执行以下操作: $this-node = DB::table('permission') -select('permission.id','object.name as object_name','permission.created_at','object.id as object_id') -join('object','object.id','=','permission.o
我对Eloquent有一个奇怪的问题,我正在尝试执行以下操作:
$this->node = DB::table('permission')
                ->select('permission.id','object.name as object_name','permission.created_at','object.id as object_id')
                ->join('object','object.id','=','permission.object_id')
                ->join('action','action.id','permission.action_id')
                ->where('permission.person_id',$this->person['id'])
                ->groupBy('permission.object_id')
                ->orderBy('permission.created_at','desc')
                ->paginate(5);

Laravel Framework报告错误:

QueryException in Connection.php line 761: SQLSTATE[42000]: Syntax
error or access violation: 1055 ‘permission.id’ isn’t in GROUP
BY (SQL: select permission.id,object.name as object_name,
permission.created_at,object.id as object_id from
permission inner join object on object.id =
permission.object_id inner join action on action.id =
permission.action_id where permission.person_id = 1 group by
permission.object_id order by permission.created_at desc limit
5 offset 0)

我在AppServiceProvider中添加了一个Eloquent调试函数DB :: listen:

use IlluminateSupportFacadesDB;
use IlluminateSupportServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
         DB::listen(function ($query) {

            echo "<pre>";
            print_r($query->sql);
            echo "</pre>";

            // $query->sql
            // $query->bindings
            // $query->time
        });
    }
    ...

它确实打印了这个SQL查询:

select  `permission`.`id`,`object`.`name` as `object_name`,`permission`.`created_at`,`object`.`id` as `object_id` 
from `permission` 
inner join `object` on `object`.`id` = `permission`.`object_id` 
inner join `action` on `action`.`id` = `permission`.`action_id` 
where `permission`.`person_id` = 1 
group by `permission`.`object_id` 
order by `permission`.`created_at` desc 
limit 5 offset 0

这在MySQL中通过PhpMyAdmin有效,这里是查询的输出:

即便如此,我直接在mysql命令中测试它确实工作得很好,看看mysql输出:

任何的想法?

谢谢

与laravel 5.3面临同样的问题
他们正在尝试使用mysql-5.7强制执行严格的查询编写

但是要禁用它,只需转到config / database.php并更改strict flag

'mysql' => [
            .
            .
            .
            'strict' => false,//'strict' => true,.
            .
        ],

希望这也能解决你的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读