2016-05-31 4 views
0

Я пытаюсь создать онлайновый каталог, где, например, люди могут искать по сайту и находить все выемки, имеющие определенный тип. Например:Laravel 5 Eloquent - whereIn on join table

"Индийский",

"Китайский"

и т.д ..

У меня есть 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

Я просто дикий угадывание здесь, но попытаться вытащить состояние за пределами функции и не указать имя таблицы:

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

Если это не работает, рассмотрим цикл все имена тэгов и использование ** илиWhere ** вместо ** whereIn **: '$ tag-> где ('name', 'chinese') -> orWhere ('name', 'value');' – TheFallen

+0

Я попробовал для этого требуется 2 минуты, чтобы найти что-нибудь. В базе данных есть 7-10 тыс. Записей, в большинстве случаев, если не все из них имеют между 1-2 тегами, есть 25-килограммовые теги, хранящиеся для всех предприятий. Любые идеи? – Phorce

+0

У вас есть индекс в вашем SQL-отношении между бизнесом и тегом? – TheFallen