gpt4 book ai didi

caching - Laravel 缓存 Eloquent

转载 作者:行者123 更新时间:2023-12-02 14:21:13 25 4
gpt4 key购买 nike

缓存 Eloquent 模型有什么区别

$myResult = Model::remember(5)->get();

并使用缓存本身:

$myResult = Cache::remember('myModel', 5, function(){
return Model::get();
});

它们是否相同,或者各自用于不同的目的?

最佳答案

您正在缓存相同的内容 - 但以两种不同的方式。它们在技术上是相同的(相同的查询结果在两个示例中缓存 5 分钟) - 但它们不同于“关注点分离”问题。

当您处理模型时 - 也许它在您的 Controller 中 - 您的 Controller 不应该真正了解模型的“内部”工作原理。它应该只询问信息,并获得正确的信息。

因此,使用您的示例 - 我们有两种构建 Controller 的方法:

首先 - 我们可以让 Controller 知道“太多”并执行以下操作:

function showUser($id)
{
$myResult = Cache::remember('myModel', 5, function(){
return Model::find($id);
});
}

在此示例中 - Controller 知道模型的内部工作原理,并且还指示缓存应该多长。但是 Controller 不应该知道用户是什么,或者应该缓存多长时间——这最好由模型来管理。也就是说,如果您在代码中的其他位置查找用户,会发生什么 - 您必须复制缓存。

同时你也可以这样做:

function showUser($id)
{
$user= User::getUser($id);
}

然后在您的用户模型中

function getUser($id)
{
return User::remember(5)->find($id);
}

这样,用户的管理就保留在模型内部。该模型知道用户应该被缓存多长时间(如果有的话)。 (是的 - 有些人会说缓存应该从模型中抽象到存储库中 - 但现在让其保持简单)。 在这个示例中, Controller 不知道结果已被缓存 - >但它不需要也不应该 - 它所需要的只是 id 为 $id

的用户

关于caching - Laravel 缓存 Eloquent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718408/

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