Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL和Redis的Laravel,使用hasMany()过滤项目的最佳方法_Mysql_Laravel_Optimization_Redis_Eloquent - Fatal编程技术网

使用MySQL和Redis的Laravel,使用hasMany()过滤项目的最佳方法

使用MySQL和Redis的Laravel,使用hasMany()过滤项目的最佳方法,mysql,laravel,optimization,redis,eloquent,Mysql,Laravel,Optimization,Redis,Eloquent,我正在开发一个应用程序,我想第一次使用Redis来加快部分查询速度。可以肯定的是,我希望将MySQL保留在后台作为备用方案,并以我熟悉的方式保持数据的相关性 让我描述一下我的情况: 我有三种模型:类别、子类别和事件 事件列包括:id,子类别id,发生在,参数,参数 事件属于子类别,子类别属于类别。这是一对多的关系 我的想法如下: 无论何时创建事件实例,我都会创建Redis(请原谅我的语法,因为我曾经研究过Redis): event:{event\u id}类别4子类别25在“发生在”参数12参数

我正在开发一个应用程序,我想第一次使用Redis来加快部分查询速度。可以肯定的是,我希望将MySQL保留在后台作为备用方案,并以我熟悉的方式保持数据的相关性

让我描述一下我的情况:

我有三种模型:
类别
子类别
事件

事件
列包括:
id
子类别id
发生在
参数
参数

事件
属于
子类别
子类别
属于
类别
。这是一对多的关系

我的想法如下:

无论何时创建
事件
实例,我都会创建Redis(请原谅我的语法,因为我曾经研究过Redis):

event:{event\u id}类别4子类别25在“发生在”参数12参数2 55处

现在我在Redis中有了这些功能,我想进行以下查询:

  • 浏览所有事件并获取唯一的category_id->返回MySQL并使用Elount获取这些类别的信息(如描述等)
  • 检查所有事件,并使用category_id进行过滤(例如,参数_1大于245->),然后再次返回MySQL并使用Eloquent获取这些类别的信息(如描述等)
第一个问题是:这是一个好方法吗?我希望MySQL数据库中的所有数据都能以防万一,但仍然可以利用Redis来熟悉它,并加快查询速度

第二个想法:在我从Redis获得正确的实例后,我应该使用Eloquent获取
类别
实例,还是应该将Redis哈希中的所有数据保存为:

事件:{event\u id}类别4子类别25在“发生在”参数\u 1 12参数\u 2 55类别\u参数\u 1“类别模型的一些数据”类别\u参数\u 2“类别模型的一些其他数据”

第三个想法:为categor创建另一组hash,并获取它们,而不是从有说服力的数据库中获取数据

category:{category\u id}category\u参数\u 1“一些数据”category\u参数\u 2“更多数据”

任何类似教程的想法、建议和链接都是非常受欢迎的。谢谢

更新:

有说服力的查询示例:

类别中
型号:

public function events()
{
  return $this->hasManyThrough('Event', 'Subcategory');
}
那么查询将是:

$categories = Category::whereHas('events', function ($query) {
    $query->where('occurs_at', '>=', Carbon::today());
})->get();

希望我没有错过任何东西。

如果您能提供一个示例SQL查询并解释为什么它需要更快,那就太好了。@ArminSam我想提高我的技能并学习Redis。我将在代码中添加示例查询,请稍候。