繁体   English   中英

Laravel-使用口才查询来缓存关系表的结果

[英]Laravel - Cache results of relationship tables using Eloquent queries

我的应用中有一个简单的关系Post x Files(一个帖子包含许多文件,而一个文件仅与一个帖子相关联)。 为了使事情更加敏捷,只要不更改,我就将帖子存储在缓存中,因此无需再次查询数据库。 我注意到的问题是,只有帖子存储在缓存中,而不是文件(我想问题是因为我查询它们的方式)。 我的代码是:

class Post extends Model
{

public function files(){
    return $this->hasMany('Ibbr\File');
}

}

获取帖子的功能:

public static function pegaPostsBoard($nomeBoard)
{
    $chave = 'posts_board';
    if(Cache::has($chave))
        return Cache::get($chave);

    $posts = Post::orderBy('updated_at', 'desc')->where('board', $nomeBoard)->where('lead_id', null)->paginate(10);
    Cache::forever($chave, $posts); //I "forget" the cache whenever the post is changed
    return $posts;
}

我还尝试在将其添加到缓存之前添加->join('files', 'posts.id', '=', 'files.post_id') ,但是它没有用。 我怎么注意到文件没有被缓存? 好吧,我重置了数据库,因此它清除了所有行,并且我注意到,如果我在页面上按F5键,则这些帖子仍然存在(因为它们已被缓存),但没有它们的文件。 因此,我的问题是如何以也存储文件的方式查询它?

使用with附加关系查询结果

$posts = Post::with('files')
    ->orderBy('updated_at', 'desc')
    ->where('board', $nomeBoard)
    ->where('lead_id', null)
    ->paginate(10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM