php - Laravel 缓存原始查询

标签 php mysql caching laravel laravel-4

我有一个包含许多原始查询的存储库,例如:

DB::select(DB::raw(
             'SELECT stuffFields
              FROM stuffTable
              A NUMBER OF COMPLEX JOINS, ETC'
          ));

我想缓存这个查询的结果,但是我遇到了几个问题:

1) 我不能做 ->remember(60),因为 Fluent 查询不是用 table() 方法启动的。

2)我做不到

DB::table('stuffTable')
          ->select(DB::raw(
             'stuffFields
              A NUMBER OF COMPLEX JOINS, ETC'
          ))->get();

因为存在那些连接并且 FROM 子句被附加在查询的末尾(连接之后),这会引发 SQL 语法错误。

我也无法在 join() 方法中提取连接,因为它们包含嵌套查询(有没有办法执行 rawJoin()...我找不到类似的东西?)。

谁能建议一种重组 Fluent 调用的方法或一种缓存此类原始查询的通用方法?

最佳答案

基于@justrohu 的回答,您可以使用一种方法来包装所有原始查询...

public function cacheQuery($sql, $timeout = 60) {
    return Cache::remember(md5($sql), $timeout, function() use ($sql) {
        return DB::raw($sql);
    });
}

$results = $this->cacheQuery("SELECT * FROM stuff INNER JOIN more_stuff");

这将通过创建 SQL 的 MD5 散列作为缓存键来缓存您的查询。

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

相关文章:

mysql - Vb.net 如何获得 ""之间的 Dim 语句?

php - 警告 : mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql. socks )中

java - 在2.0.0版本中启动Ignite服务器后出现此错误

javascript - 停止从缓存中加载 Javascript 和 HTML

php - 如何在 1-n 之间选择 RAND()

PHP - 包含而不是 <script>

php - mysqldump 将数据库从 linux 备份到 windows 服务器

java - 具有多个键的缓存

php - 数据库提取后消除表中的重复值

php - PHP 的嵌入式脚本语言?