雄辩给出错误,但查询在 phpmyadmin 中执行良好

Posted

技术标签:

【中文标题】雄辩给出错误,但查询在 phpmyadmin 中执行良好【英文标题】:Eloquent giving error but query executes fine in phpmyadmin 【发布时间】:2018-03-31 09:47:56 【问题描述】:

我尝试使用 groupBy 按 uni_id 及其创建日期对所有视图进行分组,以便生成报告。但我看到 Laravel Eloquent 正在产生错误。但是,当我在 phpmyadmin 中执行相同的查询时,它会显示数据。 Eloquent 如何处理其查询?

我正在使用 Laravel 5.2

这是我试图通过 Eloquent 运行的查询:

    $data = UniversityView::
    groupBy('created_at', 'uni_id')
    ->select('uni_id', DB::raw('count(*) as views'), 'name', 'created_at')
    ->get();

问题不在于如何解决它。我已经通过将“名称”放入 groupBy 来修复它。但问题是为什么查询在 Eloquent 中的执行方式不同?

查看下面的图片以获取帮助。谢谢。

【问题讨论】:

【参考方案1】:

这是由mysql's strict mode 引起的,它在config/database.php 的连接参数数组中指定,这就是为什么当您直接在phpMyAdmin 执行它时它可以工作,因为phpMyAdmin 使用不同的连接参数。

您可以通过修改 config/database.php 连接数组来部分禁用它,以允许这种类型的组。这样做:

添加modes 数组以仅禁用此规则:

 'strict' => true,
 'modes' => ['STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_AUTO_CREATE_USER',
            'NO_ENGINE_SUBSTITUTION'],

或者如果你知道你在做什么你可以直接做(我不会做):

'strict' => false,

【讨论】:

以上是关于雄辩给出错误,但查询在 phpmyadmin 中执行良好的主要内容,如果未能解决你的问题,请参考以下文章

相同的mysql查询在phpmyadmin的不同时间给出不同的结果

雄辩的复杂查询

Laravel 雄辩的 all() 方法给出错误“数组到字符串的转换”[关闭]

PHP中的MySQL查询给出了明显的错误结果

phpMyAdmin mbstring 错误

雄辩的选择语句给了我一个错误