我正在尝试创建一个在线目录,例如,人们可以搜索网站并查找具有特定类型的所有外卖。例如:
“印”,
“中国”
等。
我有3张桌子:
业务
标签
商家标签
我的模型如下:
class Business extends Model
{
protected $table = 'businesses';
protected $fillable = [
'business_name', 'postcode'
];
public function tags()
{
return $this->belongsToMany('App\Tags');
}
}
问题是,每当我进行搜索,并尝试执行whereIn
时,问题就是它需要永远加载,事实上,它甚至不会加载。例如:
$business = Business::whereHas('tags', function($tag) use ($request) {
if($request->get('terms'))
{
$tag->whereIn('tags.name', ['chinese']);
}
})->get();
所以我的问题是:
我在表格中存储了超过10k行的数据。该表分为三个“业务”,“标签”,“业务标签”。上面的过程需要很长时间才能完成,可能是因为我使用whereHas('tags')
和whereIn
因此,我该如何使用以下语法:
$business = Business::where( function ($business) use ($request) {
// Search for businesses with a specific tag, passed from request
});
这可能吗?
答案 0 :(得分:1)
我只是在这里疯狂猜测,但尝试将该条件拉出函数之外,并且不要指定表格的名称:
if($request->get('terms'))
{
$business = Business::whereHas('tags', function($tag) use ($request) {
$tag->whereIn('name', ['chinese']);
})->get();
}