首页 > 解决方案 > 当我使用限制或接受 whereIn 时,laravel eger 加载无法正常工作

问题描述

$all_5_post = wp_terms::with(['wp_posts' => function ($query) {
            $query->orderBy('id', 'desc')->take(5);
        }])->whereIn('id',[3,4,6,9])->get();

获取 3 id 中的关系数据,但 4、6、9 关系数据变空,但是当我只使用 WHERE eloquent 并对相同的 3、4、6、9 id 进行多次查询时,它在每个 id 中显示 5 个关系表数据我必须做什么现在我需要一个解决方案。

标签: laravellaravel-5

解决方案


就像 lagbox 在他的评论中所说的那样,'take' 语句将为所有查询结果使用五个而不是每个结果五个......

为了解决这个问题,你可以使用eloquent-eager-limit

首先:安装它:

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

第二:在您的模型中使用它,例如:

1-in 主类模型:

class wp_terms extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

  .....
}

2-在子类模型中:

class wp_posts extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

现在你可以写:

$all_5_post = wp_terms::with(['wp_posts' => function ($query) {
                                      $query->orderBy('id', 'desc')->limit(5);
                                }])->whereIn('id',[3,4,6,9])->get();

你应该得到你期望的结果......

记住:使用“限制”而不是“采取”


推荐阅读