Laravel:全局查询变量?

时间:2016-05-09 01:00:59

标签: laravel laravel-5 laravel-5.2

我有一个查询,我在routes.php几乎每个get请求下都使用该查询,并在我的许多视图中使用结果。在这一点上,我更有意义的是,我只需调用一次查询,就可以全局使用它而无需再次调用它。

以下是查询:

$followers = Follower::where('user_id', '1')
    ->get();

我该怎么做?

3 个答案:

答案 0 :(得分:1)

为什么不在init函数中执行一次查询并将结果存储到全局变量中?

global $followers = Follower::where('user_id', '1')
->get();

答案 1 :(得分:0)

每次用户登录时都可以将其存储到会话中

喜欢这个例子

$followers = Follower::where('user_id', '1')
    ->first();
Session::put('followers', 'value');

只要你愿意,你可以像这样访问它

$value = Session::get('followers');

答案 2 :(得分:0)

session的另一个答案是一个简单的解决方案,但是 我建议您为此目的使用Laravel Cache(因为这是标准做法)。

Laravel Cache::remember接受三个参数。

  1. key:制作'粉丝的md5键。和'用户ID'
  2. 时间:您希望缓存值的时间(以分钟为单位)(取决于您的值的更改频率)
  3. 一个闭包函数,当没有找到与该键对应的值时运行。 (此方法将在此情况下查询一次,并将值存储在缓存中)
  4. 在BaseController的构造函数中执行以下操作:

    $id = 1; //User id
    $key = md5('followers'.$id);
    $minutes = 60; //cache for 1 hour, change it accordingly
    $followers = Cache::remember($key, $minutes, function() use ($id) {
      return Follower::where('user_id', $id)->get();
    });
    

    现在当然要使用Cache,你需要使用一些像Redis这样的缓存驱动程序。

    如果您没有如何设置它请阅读我的其他answer

    虽然它可能会解决您的问题,但可能需要15-20分钟来设置并运行所有内容,但相信我一旦开始使用缓存,您一定会喜欢它。