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

时间:2016-11-07 16:38:37

标签: mysql laravel optimization redis eloquent

我正在开发一款应用,并希望第一次使用Redis更快地完成部分查询。可以肯定的是,我希望将MySQL作为后备保留在后台,并以我熟悉的方式保持数据相关。

让我描述一下我的情景:

我有三个模型:categorysubcategoryevents

events列包括:idsubcategory_idoccurs_atparameter_parameter_2,...

events属于subcategorysubcategory属于category。这是一对多关系。

我的想法是:

每当创建events实例时,我都会创建Redis hash entry(请原谅我的语法,因为我曾经研究过Redis):

event:{event_id} category 4 subcategory 25 at "occurs_at" parameter_1 12 paremeter_2 55

现在我在Redis中有这些,我想做以下查询:

  • 浏览所有活动并获得唯一的category_id's - >返回MySQL并使用Eloquent
  • 获取这些类别的信息(如描述等)
  • 浏览所有事件并过滤(使用MATCH)category_id,例如,其中parameter_1大于245 - >然后再回到MySQL并使用Eloquent
  • 获取这些类别的信息(如描述等)

第一个问题是:这是一个好方法吗?我想在我的MySQL数据库中包含所有数据以防万一,但仍然使用Redis来熟悉它并使查询更快。

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

event:{event_id} category 4 subcategory 25 at "occurs_at" parameter_1 12 paremeter_2 55 category_parameter_1 "some data from category model" category_parameter_2 "some other data from category model"

第三个想法:为分类创建另一组哈希并获取它们而不是来自雄辩的数据。

category:{category_id} category_parameter_1 "some data" category_parameter_2 "more data"

任何想法,指针,类似教程的链接都非常受欢迎。谢谢!

更新

Eloquent查询示例:

category模型中:

public function events()
{
  return $this->hasManyThrough('Event', 'Subcategory');
}

然后查询将是:

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

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

0 个答案:

没有答案