php Laravel Eloquent:take()in with()不加载预期数量的相关记录

nle07wnf  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(109)

我遇到了一个Laravel Eloquent查询的问题,我试图在with()方法中使用take()方法来限制相关记录的加载。但是,查询没有加载预期数量的相关记录。
我遇到的问题是,这段代码只检索第一个类别的前6篇文章,并且它不会为每个类别加载多达6篇文章,即使每个类别有数百篇文章。

代码示例:

我有两个雄辩的模型:CategoryArticle。每个Category有许多Article记录,我想加载到每个类别6篇文章。下面是我使用的代码:

$categories = Category::with(['articles' => function ($query) {
    $query->take(6);
}])->get()->toArray();

Category.php

public function articles()
    {
        return $this->hasMany(Article::class);
    }

我检查的内容:

  • 我已经验证了每个类别都有超过6篇与之相关的文章。
  • 我已经确保在我的代码中没有其他约束或过滤器应用于结果集。
  • 数据库架构似乎定义了正确的关系。
    预期成果:

我希望查询为每个类别加载最多6篇文章,而不仅仅是第一个类别的前6篇文章。

Laravel版本:10.0

a0x5cqrl

a0x5cqrl1#

安装eloquent-eager-limithttps://github.com/staudenmeir/eloquent-eager-limit
composer require staudenmeir/eloquent-eager-limit:"^1.0"
包括HasEagerLimit特征。

class Category extends Model
{
  use HasEagerLimit;
...

class Article extends Model
{
  use HasEagerLimit;
...

像往常一样限制你的急切加载。

$categories = Category::query()
  ->with(['articles' => fn($query) => $query->limit(6)])
  ->get()->toArray();

相关问题