【问题标题】:How to replace collection in query result Mongo如何替换查询结果Mongo中的集合
【发布时间】:2021-09-22 08:01:42
【问题描述】:

我查询从具有这样的多对多关系的表中获取信息

$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); 减少了。我怎样才能用减少的集合替换集合?

【问题讨论】:

    标签: php laravel-8 jenssegers-mongodb


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-30
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2022-06-10
      相关资源
      最近更新 更多