以下查询适用于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中断。
答案 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设置中。
但是,您应该考虑重写该查询以显式选择每个线程的第一个/最后一个消息。