Laravel限制每个模型的急切负载

时间:2018-12-18 16:47:53

标签: laravel eloquent

借助我们的用户模型,我们渴望加载对话和这些对话的消息。在每次对话中,我们都希望引导最后25条消息。因此,我们编写了以下查询。

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

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

Laravel Eloquent方法论中是否有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

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;
}

然后,您可以将->take(25)应用于您的关系。

相关问题