Laravel 限制每个模型的预加载

Wil*_*tyn 1 laravel eloquent

使用我们的 User 模型,我们渴望加载对话和这些对话的消息。在每个对话中,我们希望引导最后 25 条消息。所以我们写了下面的查询。

User::where('status', 3)->with(['conversations.messages' => function ($q) {
    $q->take(25)->orderBy('created_at', 'DESC');
}])->get();
Run Code Online (Sandbox Code Playgroud)

但是,此函数总共只返回 25 条消息(因此不是每个对话)。即使您有 1000 个用户,它也会加载消息表中的最后 25 条消息,但不会加载用户每个会话的最后 25 条消息。

有没有办法在 Laravel Eloquent 方法中解决这个问题?

Jon*_*eir 5

Laravel 中没有对此的原生支持。

我为它创建了一个包:https : //github.com/staudenmeir/eloquent-eager-limit

HasEagerLimit在父模型和相关模型中使用特征。

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

class Message extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以申请->take(25)你的关系。