按组排序依据Eloquent属于ToMany关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按组排序依据Eloquent属于ToMany关系相关的知识,希望对你有一定的参考价值。
我希望得到project_id
订购的独特帖子,基本上,如果有重复的帖子我想要一个project_id
不是null。有没有办法得到这个?
此代码返回唯一的帖子,但project_id
没有订购它们。
/**
* Get the posts record associated with the service.
*/
public function posts()
{
return $this->belongsToMany('AppPost')
->withPivot('id', 'unity', 'coefficient', 'project_id')
->orderBy('project_id', 'DESC')
->groupBy(['post_id']);
}
如果我删除groupBy
,我得到project_id
订购的重复帖子。
dd($service->posts()->toSql());
的输出:
select * from `posts`
inner join `post_service` on `posts`.`id` = `post_service`.`post_id`
where `post_service`.`service_id` = ?
group by `post_id`
order by `project_id` desc
贝娄我展示了我得到的结果和我想要的结果:
我删除了其他数据以便更好地阅读
结果与groupBy
和orderBy
条款。独特的帖子,但没有由project_id
订购:
"posts": [
{
"id": 733,
"pivot": {
"service_id": 20177,
"post_id": 733,
"id": 2575,
"project_id": null
}
},
{
"id": 725,
"pivot": {
"service_id": 20177,
"post_id": 725,
"id": 2576,
"project_id": null
}
}
],
没有groupBy
条款的结果。由project_id
订购的重复帖子:
"posts": [
{
"id": 733,
"pivot": {
"service_id": 20177,
"post_id": 733,
"id": 9723,
"project_id": 4
}
},
{
"id": 733,
"pivot": {
"service_id": 20177,
"post_id": 733,
"id": 2575,
"project_id": null
}
},
{
"id": 725,
"pivot": {
"service_id": 20177,
"post_id": 725,
"id": 2576,
"project_id": null
}
}
],
结果我渴望。 project_id
订购的独特帖子:
"posts": [
{
"id": 733,
"pivot": {
"service_id": 20177,
"post_id": 733,
"id": 9723,
"project_id": 4
}
},
{
"id": 725,
"pivot": {
"service_id": 20177,
"post_id": 725,
"id": 2576,
"project_id": null
}
}
],
我感谢您抽出宝贵时间帮助我。
答案
检索posts
时,将返回一个集合。
然后,您可以使用->sortByDesc()
collection method按降序排序结果(使用自定义逻辑):
$posts = $service->posts
->sortByDesc(function ($post, $key) {
return $post['pivot']['project_id'];
})
->values()
->all();
这里qazxsw poi按照posts
的qazxsw poi降序排序(不确定这是通过post_id
语法或数组键访问,因为我还没有测试过)。
要删除任何重复项(检查post
是否为null),您应该使用->
:
project_id
以上是关于按组排序依据Eloquent属于ToMany关系的主要内容,如果未能解决你的问题,请参考以下文章