Я пытаюсь создать онлайновый каталог, где, например, люди могут искать по сайту и находить все выемки, имеющие определенный тип. Например: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
});
Возможно ли это?
Если это не работает, рассмотрим цикл все имена тэгов и использование ** илиWhere ** вместо ** whereIn **: '$ tag-> где ('name', 'chinese') -> orWhere ('name', 'value');' – TheFallen
Я попробовал для этого требуется 2 минуты, чтобы найти что-нибудь. В базе данных есть 7-10 тыс. Записей, в большинстве случаев, если не все из них имеют между 1-2 тегами, есть 25-килограммовые теги, хранящиеся для всех предприятий. Любые идеи? – Phorce
У вас есть индекс в вашем SQL-отношении между бизнесом и тегом? – TheFallen