gpt4 book ai didi

php - Laravel 4 查询缓存

转载 作者:可可西里 更新时间:2023-11-01 00:02:41 26 4
gpt4 key购买 nike

我在缓存查询时遇到问题。每当我访问我的 API 时,我都会从数据库中获得新结果,而不是我想要的缓存结果。奇怪的是,如果我查看文件缓存,我可以看到缓存的结果,它们正是我所期望的,但是当我调用 API 时,我得到了新的结果。以下是相关文件的一些片段。我哪里出错了?

我的 API 调用的存储库函数:

public function topMonth()
{
$top = $this->repository->month()->top()->joinUser()->remember(30)->get(['things.id', 'things.votes', 'things.title', 'things.description', 'things.tags', 'things.created_at', 'users.id as user_id','users.username','users.picture as user_picture'])->toArray();

return $top;
}

模型

class Thing extends Eloquent
{

public function scopeTop($query)
{
return $query->orderBy('things.votes', 'desc');
}

public function scopeYear($query)
{
return $query->whereRaw("things.created_at > STR_TO_DATE('" . Carbon::now()->subYear() . "', '%Y-%m-%d %H:%i:%s')");
}

public function scopeMonth($query)
{
return $query->whereRaw("things.created_at > STR_TO_DATE('" . Carbon::now()->subMonth() . "', '%Y-%m-%d %H:%i:%s')");
}

public function scopeWeek($query)
{
return $query->whereRaw("things.created_at > STR_TO_DATE('" . Carbon::now()->subWeek() . "', '%Y-%m-%d %H:%i:%s')");
}

public function scopeDay($query)
{
return $query->whereRaw("things.created_at > STR_TO_DATE('" . Carbon::now()->subDay() . "', '%Y-%m-%d %H:%i:%s')");
}

public function scopeJoinUser($query)
{
return $query->join('users', function($join)
{
$join->on('users.id', '=', 'things.created_by');
});
}

}

最佳答案

如果您的 sql 查询保持完全相同,您将只能像那样缓存。在这种情况下,它不会归因于您的 top() 查询范围。

这是由于查询构建器生成缓存键的方式所致。它将整个查询转换为一个 sql 并序列化它的绑定(bind),如下面的 Laravel 代码所示:

/**
* Generate the unique cache key for the query.
*
* @return string
*/
public function generateCacheKey()
{
$name = $this->connection->getName();

return md5($name.$this->toSql().serialize($this->bindings));
}

相反,您必须像这样手动缓存它;

if (($top = Cache::get('users.top')) === null)
{
$top = $this->repository->month()->top()->joinUser()->get(['things.id', 'things.votes', 'things.title', 'things.description', 'things.tags', 'things.created_at', 'users.id as user_id','users.username','users.picture as user_picture'])->toArray();
Cache::put('users.top', $top, 30);
}

关于php - Laravel 4 查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579826/

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