Ich habe Schwierigkeiten, die Beziehung Anzahl Bedingung in WhereHas zu verstehen. Die Dokumentseite hat keine Diskussion darüber, aber API page spricht darüber. Zitat von der API.Was ist Beziehungsanzahl Bedingung in WhereHas Laravel
Builder | Builder whereHas (string $ Beziehung, Closure $ Rückruf, string $ operator = '> =', int $ count = 1)
eine Beziehung Zählbedingung auf die Abfrage hinzufügen mit where-Klauseln .
Beispiel
A Resource
Modell hat zu vielen Bezug auf ResourceCategory
public function categories()
{
return $this->belongsToMany('ResourceCategory', 'resource_category_mapping');
}
Relationsbedingung Viele in Hat
Die Beziehung Zustand in Has wie erwartet funktioniert.
Resource::has('categories', '>', 1)->get()
//this return all resources which have more than one catgories
Beziehung Zustand in WhereHas
Die Beziehung Zustand in WhereHas funktioniert nicht wie erwartet. Ich bin sicher, ich habe es falsch verstanden.
Resource::whereHas('categories', function ($query){
$query->whereIn('resource_category_id', [1, 2, 4]);
}, '>', 1)->get()
Der obige Code sollte Ressourcen zurück, die die Kategorien gehören einen der [1, 2, 4], und die Ressource hat mehr als eine Kategorie. Aber es ist nicht.
Frage
bitte die Beziehung Zustand in WhereHas erklärt, kann ein Beispiel werden, vorausgesetzt, wäre viel hilfreich.
können Sie meine Erklärung zu meinem whereHas Code überprüfen 'Der obige Code sollte Ressourcen zurückgeben, deren Kategorien entweder zu [1, 2, 4] gehören und die Ressource mehr als eine Kategorie hat'. Ist das richtig...? – hhsadiq
Funktioniert für mich. Bitte fügen Sie die Abfrage ein, die Sie erhalten - ersetzen Sie get() durch toSql() - und fügen Sie es hier ein. –
Wählen Sie * aus 'Ressource' aus, wobei' Ressource'.deleted_at' null ist und 'Vorname_ =? und (wählen Sie count (*) aus 'resource_category' innerer Join' resource_category_mapping' in 'resource_category'.'id' =' resource_category_mapping''resource_category_id' wo 'resource_category_mapping''resource_id' =' resource'.id' und 'resource_category_id' in (?,?,?,?)) = 3 – hhsadiq