【问题标题】:advance limit results in LaravelLaravel 中的提前限制结果
【发布时间】:2014-04-30 06:33:00
【问题描述】:

我做了很多研究,仍然没有解决问题,希望你们中的一些人可以帮助我。

我有一个表 Post 和一个表 Comment 与正常关系 Post Has Many Comments

我设置了以下查询以获取 10 个相关 cmets 的帖子:

Post::with('comments')->limit(10)->get();

它工作得很好,但仍然不是我的最终结果,因为我希望将 cmets 限制为 5 对于每个帖子

到目前为止,我尝试了此查询以限制我的 cmets,即使从逻辑上讲它只会限制所有帖子的 5 cmets。事实上它和我猜的一样。

Post::with(['comments' => function($comments){

       $comments->limit(5);

}])->limit(10)->get();

也许用 eloquent 这种查询是不可能的,但我怎样才能让它工作,即使有 2 个不同的查询并合并结果?

任何形式的帮助都将不胜感激。

谢谢

【问题讨论】:

    标签: php mysql laravel laravel-4 eloquent


    【解决方案1】:

    解决方案在这里: http://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

    类似这样的: return $this->cmets()->latest()->nPerGroup('post_id', 5);

    【讨论】:

      【解决方案2】:

      我认为你需要做的是限制关系中的帖子数量。

      这样就可以了:

      public function comments()
      {
          return $this->hasMany('Comment')->limit(5);
      }
      

      虽然没有对此进行测试,所以它可能无法正常工作。

      【讨论】:

      • 感谢您的回答,我尝试这样做,但像这样限制,它限制了所有帖子(如我上面的查询)的 5 cmets。你有其他想法吗?
      【解决方案3】:

      请使用

          $lines = \Category::where('status', \Category::STATUS_PUBLISH)
                  ->with(['firstThreeComment'])
                  ->get()
                  ->map(function( $category ){
                      $category->firstThreeComment = $category->firstThreeComment->take(3);
                      return $category;
      });
      

      【讨论】:

        猜你喜欢
        • 2014-09-07
        • 1970-01-01
        • 2021-01-23
        • 2020-05-07
        • 2019-09-23
        • 2020-02-27
        • 2020-08-14
        • 2015-05-30
        • 1970-01-01
        相关资源
        最近更新 更多