Laravel 5 Eloquent - 在连接表上

时间:2016-05-31 12:59:56

标签: mysql laravel-5 eloquent

我正在尝试创建一个在线目录,例如,人们可以搜索网站并查找具有特定类型的所有外卖。例如:

“印”,

“中国”

等。

我有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

}); 

这可能吗?

1 个答案:

答案 0 :(得分:1)

我只是在这里疯狂猜测,但尝试将该条件拉出函数之外,并且不要指定表格的名称:

    if($request->get('terms'))
    {
        $business = Business::whereHas('tags', function($tag) use ($request) {
            $tag->whereIn('name', ['chinese']);
        })->get();
    }