Laravel 5.3 groupBy()破碎?

时间:2016-08-27 12:45:16

标签: laravel eloquent

以下查询适用于Laravel 5.2但不适用于Laravel 5.3。

$messages = Message::with('sender.profile', 'recipient.profile')
    ->where('sender_id', 1)
    ->orWhere('recipient_id', 1)
    ->groupBy('thread')
    ->get();

在5.3中运行时,我收到以下错误消息

SQLSTATE[42000]: Syntax error or access violation: 1055
'tmp_laravel.messages.id' isn't in GROUP BY (SQL: select * from `messages` 
where `sender_id` = 1 or `recipient_id` = 1 group by `thread`)

现在,在您说这是一个数据库问题之前,请记住:同样的查询在相同数据库的Laravel 5.2中有效。所以,如果是我的MariaDB版本,它当然不应该在L5.2中运行,对吧?

另外,如果我直接在Sequel Pro中运行查询,它就可以运行。

事实上,为了确保它不是我在升级我的应用程序时所做的事情,我安装了两个Laravel的新副本:5.2和5.3。并在每个中安装完全相同的代码,以便它们在控制器,模型,路由,.env等方面完全相同,然后在每个版本中再次运行查询。相同的结果:在L5.2中工作,在L5.3中断。

1 个答案:

答案 0 :(得分:2)

select * from `messages` 
where `sender_id` = 1
   or `recipient_id` = 1 
group by `thread`

此查询无效,但在禁用严格模式的MySQL / MariaDB中“有效”。 Laravel不使用服务器默认设置。您需要修改config/database.php并设置

'strict' => false,

在MySQL设置中。

但是,您应该考虑重写该查询以显式选择每个线程的第一个/最后一个消息。