我在Laravel 5.4中遇到了一个问题,并且有很多关系。 我需要对关系结果执行查询。
我将通过json结果解释我想要的内容,所以这是执行此Channel::with('categories')->get();
后的正常结果:
[
{
"id": 87,
"username": "ch1",
"type": "channel",
"members": 210424,
"created_at": "2017-05-09 01:39:44",
"updated_at": "2017-05-16 17:19:28",
"categories": [
{
"id": 32,
"title": "cat1",
"created_at": "2017-05-10 10:04:46",
"updated_at": "2017-05-10 10:04:46",
"pivot": {
"channel_id": 87,
"category_id": 32
}
},
{
"id": 33,
"title": "cat2",
"created_at": "2017-05-10 10:04:46",
"updated_at": "2017-05-10 10:04:46",
"pivot": {
"channel_id": 87,
"category_id": 33
}
}
]
}
]
我希望得到这样的结果:
[
{
"id": 87,
"username": "ch1",
"type": "channel",
"members": 210424,
"created_at": "2017-05-09 01:39:44",
"updated_at": "2017-05-16 17:19:28",
"categories": "cat1 , cat2"
}
]
事实上,我需要字符串格式的所有类别,因为我必须在Channel列和with
结果上执行多个查询。
更新
我想要做的最后一个查询就是这个:
Channel::orderBy('members', 'desc')
->with('categories')
->where([
['visible', 1],
['title', 'LIKE', '%' . $trend . '%'],
['members', '>', $members],
['category', 'LIKE', $category]])
->get()->skip($n)->take(10);
$trend
,$category
和$n
是动态变量。
我需要使用skip()
和take()
方法,因此我无法通过像每个行foreach
这样的行为将我的数据类型从Collection更改为另一行!
答案 0 :(得分:3)
基本上,就像@ceejayoz所说的那样,你会想要破坏已加载的类别。但是,由于您还想修改结果,我建议使用地图。这样的事情,虽然我现在不能测试代码。
$channels = Channel::with('categories')
->get()
->map(function ($channel) {
$channel->categories = $channel->categories->pluck('title')->implode(' , ');
return $channel;
});