【发布时间】:2016-03-12 03:47:50
【问题描述】:
我正在按公司和/或类别进行搜索。 输出应该是上市公司,每个公司输出一个或多个类别。
表“公司”
身份证名称
1 公司 1 2 公司 2 3 公司 3
表“类别”
身份证名称
1 托管 2 域 3 硬件
列出所有结果
- 公司 1,(类别 = 托管、域)
- 公司 2,(类别 = 域硬件)
- 公司 3,(类别 = 硬件托管)
现在我的问题是如何构建 ORM 查询以便过滤类别?按公司过滤很容易实现,但我坚持按类别过滤。
例如我希望达到的输出。
过滤域,输出
- 公司 1,(类别 = 托管、域)
- 公司 2,(类别 = 域硬件)
公司条目大约 20k 行,而类别 1k+ 行。
测试失败
此查询耗时过长,并且也会占用处理器。
$companies = Companies
::with(['categories'=>function($q)use($category){
if (isset($category)){
$q->where('slug','=',$category->slug);
}
}])->paginate(20);
此查询时,仅过滤公司模式内的类别。
$companies = Companies::whereHas('categories',function($q)use($category){
$q->where('categories.id','=',$category->id);
})
->paginate(20);
有两种模式
公司
public function categories(){
return $this->belongsToMany('App\Models\Categories','companies_categories','company_id','category_id');
}
类别
public function companies(){
return $this->belongsToMany('App\Models\Companies','companies_categories','category_id','company_id');
}
【问题讨论】: