我有一个包含以下列的“消息”表
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fromId` int(11) NOT NULL,
`toId` int(11) NOT NULL,
`message` text NOT NULL,
`status` int(11) NOT NULL,
`device` varchar(100) NOT NULL,
`createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=latin1;
我正在尝试获取 'toId' = $id 并按 fromId 分组的所有消息。问题在于结果中显示的“消息”是第一个,而不是最新的。我尝试通过 createAt 进行排序,但它不起作用。
在查询和分组结果之前如何按“createdAt”排序?我想使用 Eloquent 以 laravel 的方式做到这一点。
我的查询:
$chats = Message::with('sender','recipient')
->where('toId',$id)
->orderBy('createdAt')
->groupBy('fromId')
->paginate(10)
我只需要对消息模型做类似的事情。对我有用的是应用unique
返回的 Eloquent 集合上的方法。
Model::where('toId', $id)
->orderBy('createdAt', 'desc')
->get()
->unique('fromId');
查询将返回按以下顺序排序的所有消息createdAt
和unique
方法会将其减少为每个消息一条消息fromId
。这显然不如直接使用数据库那么高效,但就我而言,我对查询有进一步的限制。
此外,还有许多更有用的方法来处理这些集合:https://laravel.com/docs/5.2/collections#available-methods https://laravel.com/docs/5.2/collections#available-methods
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)