在laravel 5.6中将集合保存在全局变量中

时间:2018-04-16 05:58:21

标签: laravel variables eloquent laravel-eloquent

所以基本上我有一个索引页面,我必须去控制器从数据库中获取数据

路线: -

route::get('/index/{$x}', 'indexController@index');

索引控制器: -

$data = Data::where('name', $x)->get(); return View::make('index', compact('data');

然后在索引页面内我有到第二页的链接 使用相同的数据,我不想查询相同的数据,因为它可能会影响性能

路线: -

route::get('/second', indexController@second);});

第二名管制员: -

$data = $data->sortBy('id'); return View::make('second', compact('data');

我想把数据保存在控制器的全局变量中

所以我在控制器中添加了私有变量,并尝试通过$this->data

访问它

但它没有用,因为基于我的搜索,控制器将在返回视图后关闭

所以,如果我尝试在第二个函数中访问$this->data,它将为空

是否可以在全局变量中保存查询数据(集合)

因为我不想为每个页面查询相同的数据

您的帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

如果您在不同页面上使用任何类型的全局变量都无法解决相同的数据。您需要缓存查询结果。请检查laravel docs https://laravel.com/docs/5.6/cache

中的缓存

以下是通常的做法:

$data = Cache::get('some_cache_key');

if (empty($data)) {
    $data = Data::where('name', $x)->get();
    Cache::put('some_cache_key', $data, 60); //60 minutes
}

return View::make('index', compact('data');

答案 1 :(得分:0)

有多种方法可以实现这一目标。您可以将数据存储在Session中并访问整个应用程序

$data = Data::where('name', $x)->get();

session()->put('data', $data);

您也可以使用View::share('key', $data)

AppServiceProviderboot()方法

 public function boot()
    {            
        View::share('data', Cache::get('data'));
    }

在您的控制器中。

$data = Data::where('name', $x)->get();
Cache::put('data', $data); 

通过这种方式,您可以在视图中使用{{ $data }}访问整个应用程序中的数据。

希望这会有所帮助。