Ich versuche, ein Online-Verzeichnis zu erstellen, wo zum Beispiel Menschen die Website durchsuchen und alle Takeaways, die einen bestimmten Typ haben, finden können. Zum Beispiel:Laravel 5 Eloquent - WhereIn auf Join-Tabelle
"Indian",
"Chinese"
etc ..
Ich habe 3 Tabellen:
Geschäft
Schlagwörter
Wirtschaft Tags
Und mein Modell ist wie folgt:
class Business extends Model
{
protected $table = 'businesses';
protected $fillable = [
'business_name', 'postcode'
];
public function tags()
{
return $this->belongsToMany('App\Tags');
}
}
Das Problem ist, wenn ich gekommen, um die Suche zu tun, und versuchen, eine whereIn
das Problem ist zu tun, dass es für immer zu laden, in der Tat nimmt, es doesn lade nicht einmal. Zum Beispiel:
$business = Business::whereHas('tags', function($tag) use ($request) {
if($request->get('terms'))
{
$tag->whereIn('tags.name', ['chinese']);
}
})->get();
So ist meine Frage:
Ich habe nur über 10k Reihen in der Tabelle gespeicherten Daten. Diese Tabelle ist in drei "Business", "Tags", "Business Tags" unterteilt. Das Verfahren, das wird so lange dauert zu vollenden, wahrscheinlich, weil ich die whereHas('tags')
und whereIn
daher verwenden, wie gehe ich über die folgende Syntax verwenden:
$business = Business::where(function ($business) use ($request) {
// Search for businesses with a specific tag, passed from request
});
Ist das möglich?
Wenn dies nicht funktioniert, sollten Sie alle looping Ihre Tagnamen und die Verwendung von ** orWhere ** anstelle von ** whereIn **: '$ tag-> wo ('name', 'chinesisch') -> oderWobei ('name', 'wert');' – TheFallen
Ich habe es versucht Um dies zu tun, dauert es über 2 Minuten, um etwas zu finden. Es gibt 7-10k Datensätze in der Datenbank, die meisten, wenn nicht alle von ihnen haben zwischen 1-2 Tags sind 25k Tags für alle Unternehmen gespeichert - Irgendwelche Ideen? – Phorce
Haben Sie einen Index in Ihrer SQL-Beziehung zwischen einem Geschäft und einem Tag? – TheFallen