【问题标题】:how to get 5 categories from category table and get 4 post of each category in laravel [duplicate]如何从类别表中获取5个类别并在laravel中获取每个类别的4个帖子[重复]
【发布时间】:2021-08-24 14:17:22
【问题描述】:

我有一个名为categories 的表和一个名为courses 的表。这些表是一对多的关系,这意味着每个课程属于一个类别,每个类别有很多课程。 现在,我想为这些类别中的每一个获得五个categories(顺序还不重要)和四个courses。我在 stackoverflow 和网络上尝试了一些解决方案,但都没有奏效!其中一个(以下代码)仅获得第一项的 4 门课程!

$result = Category::with(['courses' => function ($query) {
    $query->take(4);
})->take(5)->get();

我用 for 循环解决了这个问题,但我想知道 laravel 是否有它的解决方案。 我将不胜感激您的回答。 :)

【问题讨论】:

  • 在某种程度上确实如此。

标签: laravel eloquent laravel-8


【解决方案1】:

有一个专门用于此的 laravel 包,称为 Eloquent Eager Limit

安装后:

composer require staudenmeir/eloquent-eager-limit:"^1.0"

您应该在应用有限预加载的模型中使用它:

class Category extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 // ........
}

class Course
extends Model
{

use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
 // ........
}

现在这个查询会得到你想要的结果:

   $result = Category::with(['courses' => function ($query) {
    $query->take(4);
})->take(5)->get();

【讨论】:

  • 是的!这就是我要的。我真的希望 laravel 有这个功能!谢谢你。 :)
  • 哇,超级有趣。我本来希望Model::has('relations', '>=', 4)->with(['relations' => function ($query){ $query->limit(4); }])->limit(5)->get();(类似于下面已删除的答案)返回5个Model实例,每个实例有4个Relation实例,但只有第一个模型有4个,其余的有0个。很好的发现这个问题和解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2018-11-28
  • 2021-12-20
  • 2011-05-16
  • 2014-11-18
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多