如何替换查询结果中的collection



我查询了一个像这样的多多关系表的信息

$userList = UserListing::where('user_id', $user->id)->with("objects")->paginate(10);

现在,我想限制"对象"中结果的数量。表,但同时我想知道总共有多少个对象

$userList = UserListing::where('user_id', $user->id)->with(["objects"=> function($query) {
$query->take(2);
}])->paginate(10);

但是通过这样做,我无法获得对象的总数,因为我将其限制为2,然后我尝试像这样处理信息

$userList = UserListing::where('user_id', $user->id)->with("objects")->paginate(10);
foreach ($userList as $key => $value) {
$l = count($value["objects"]);
$value["objects"] = $value["objects"]->take(2);
$value["number_objects"] = $l;
}

但显然,这并没有取代集合值["objects"],因为它仍然返回3个对象,尽管应该与$value["objects"] = $value["objects"]->take(2);减少。我怎样才能用减少的集合来替换集合?

所以,我一直在调查,并注意到userList是一个LengthAwarePaginator对象,其属性显然是在其原始字段中不可变的(这意味着您可以添加新的,但不能删除/修改已经存在的)。知道了这一点,我又搜索了一下,找到了这个答案:

https://stackoverflow.com/a/49133519/7228093

基本上是从原始的创建一个新的LenghtAwarePaginator,允许您修改字段。如果有人发现在这种情况下,这可能是一个很好的选择(顺便说一下,集合的转换方法不起作用,只有这个)。

相关内容

  • 没有找到相关文章

最新更新