2016-05-31 111 views
0

我想創建一個在線目錄,例如,人們可以通過網站搜索並找到具有特定類型的所有外賣。例如:Laravel 5雄辯 - 凡在加入表

「印」,

「中國」

等。

我有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(); 

所以我的問題是這樣的:

我有剛剛超過1萬行存儲在表中的數據。此表分爲三個「商業」,「標籤」,「商業標籤」。上述過程要花這麼長時間來完成,可能是因爲我用的是whereHas('tags')whereIn因此,我怎麼去使用的語法如下:

$business = Business::where(function ($business) use ($request) { 

    // Search for businesses with a specific tag, passed from request 

}); 

這可能嗎?

回答

1

我只是猜測野這裏,但要儘量拉功能之外的條件,不指定表的名稱:

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

如果這不起作用,考慮循環的全部('name','chinese') - > orWhere('name','value');' – TheFallen

+0

我嘗試過使用**或者**替代** where where **:'$ tag->要做到這一點,它需要2分鐘才能找到任何東西。數據庫中有7-10k條記錄,大多數(如果不是全部)記錄有1-2個標籤,那麼所有業務都有25k標籤 - 任何想法? – Phorce

+0

你在業務和標籤之間的SQL關係中有索引嗎? – TheFallen