Memcaching 数据库查询结果在 Laravel 5.1
Memcaching database queries with results in Laravel 5.1
我想将查询结果放入内存缓存 Laravel 5.1。
当我使用下面的代码时,它显示一些错误和查询,结果未放入缓存中。见以下代码:
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use DB;
class Product extends Model
{
public static function get_product_by_category($cat_id)
{
$result = array();
$result = Cache::remember('get_product_by_category', 15/60, function() {
$data = ModelProduct::join('products_images AS pimg', 'products.product_id', '=', 'pimg.pi_pid')
->join('products_bridge AS pb', 'products.product_id', '=', 'pb.pb_product_id')
->join('product_category_bridge AS pcb', 'pcb.pcb_product_id', '=', 'pb.pb_product_id')
->where('pcb.pcb_cat_id',$cat_id)
->where('products.product_status',1)
->select('pcb.pcb_cat_id AS category_id','products.product_id AS product_id',
'products.product_title AS product_name',DB::raw("COUNT(pb.pb_store_id) AS availibility_on_stores")
)->grouy('pb.pb_product_id')->get();
foreach($data as $value)
{
$result[$value->category_id][$value->product_id]["product_name"]=$value->product_name;
$result[$value->category_id][$value->product_id]["product_availibility_on_stores"]=$value->availibility_on_stores;
}
return $result;
});
return $result;
}
}
?>
错误: Undefined variable: cat_id
我正在使用以下参考资料:
https://www.youtube.com/watch?v=PY09dDq5Mfw
https://bosnadev.com/2014/12/27/laravel-caching-database-queries/
您传递给 remember() 的闭包无法访问 $cat_id 变量 - 默认情况下闭包具有如果在对象上下文中执行,则只能访问 $this 引用,因此您需要使用 use 语句明确告知哪些变量应该从父作用域继承。
替换
$result = Cache::remember('get_product_by_category', 15/60, function() {
和
$result = Cache::remember('get_product_by_category', 15/60, function() use ($cat_id) {
有关详细信息,请参阅 http://php.net/manual/en/functions.anonymous.php。
我想将查询结果放入内存缓存 Laravel 5.1。 当我使用下面的代码时,它显示一些错误和查询,结果未放入缓存中。见以下代码:
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use DB;
class Product extends Model
{
public static function get_product_by_category($cat_id)
{
$result = array();
$result = Cache::remember('get_product_by_category', 15/60, function() {
$data = ModelProduct::join('products_images AS pimg', 'products.product_id', '=', 'pimg.pi_pid')
->join('products_bridge AS pb', 'products.product_id', '=', 'pb.pb_product_id')
->join('product_category_bridge AS pcb', 'pcb.pcb_product_id', '=', 'pb.pb_product_id')
->where('pcb.pcb_cat_id',$cat_id)
->where('products.product_status',1)
->select('pcb.pcb_cat_id AS category_id','products.product_id AS product_id',
'products.product_title AS product_name',DB::raw("COUNT(pb.pb_store_id) AS availibility_on_stores")
)->grouy('pb.pb_product_id')->get();
foreach($data as $value)
{
$result[$value->category_id][$value->product_id]["product_name"]=$value->product_name;
$result[$value->category_id][$value->product_id]["product_availibility_on_stores"]=$value->availibility_on_stores;
}
return $result;
});
return $result;
}
}
?>
错误: Undefined variable: cat_id
我正在使用以下参考资料: https://www.youtube.com/watch?v=PY09dDq5Mfw https://bosnadev.com/2014/12/27/laravel-caching-database-queries/
您传递给 remember() 的闭包无法访问 $cat_id 变量 - 默认情况下闭包具有如果在对象上下文中执行,则只能访问 $this 引用,因此您需要使用 use 语句明确告知哪些变量应该从父作用域继承。
替换
$result = Cache::remember('get_product_by_category', 15/60, function() {
和
$result = Cache::remember('get_product_by_category', 15/60, function() use ($cat_id) {
有关详细信息,请参阅 http://php.net/manual/en/functions.anonymous.php。