gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:54:06 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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) 调用链接到您的预加载查询(您似乎已经这样做了)。

您甚至可以使用 ->offset(...)->skip(...)(有关详细信息,请参阅存储库自述文件)。

关于Laravel 限制每个模型的急切加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com