2013-06-27 8 views
5

Nicht sicher, ob dies der richtige Weg ist, eine zusätzliche Abfrage zum hasMany-Argument hinzuzufügen, aber nicht erfolgreich war. Ist das möglich?Laravel 4 hasMany with WHERE-Klausel

public function menuItems($parent=false){ 
    if($parent){ 
     $menuItems = $this->hasMany('MenuItem')->where('parent',$parent); 
    }else{ 
     $menuItems = $this->hasMany('MenuItem'); 
    } 
    return $menuItems; 
} 

genannt Wenn

$menu_items = $menu->menuItems(0); 

mit Das scheint nur ein leeres Array zurück, wenn ein Elternteil übergeben. Auch wenn Daten mit MenuItem-> parent = 0 existiert

Muss ich auf irgendeine Weise müssen unterscheiden ich für meine verknüpften Elemente „Eltern“ bin gefragt und nicht die wichtigsten Modelle „Eltern“

+0

Können Sie Ihr Tabellenlayout veröffentlichen? Ich kann nicht sagen, was hier vor sich geht. Deine Child-Tabelle sollte nur einen Verweis auf die Eltern-Zeile haben. Dein '-> hasMany()' von CHILD zu PARENT verweist darauf. Möglicherweise müssen Sie das zweite Argument angeben, das den Parent-Child-Beziehungsschlüssel definiert. –

Antwort

12
public function menuItems(){ 
     return $this->hasMany('MenuItem'); 
} 

mit

Called
$menu_items = $menu->menuItems()->where('parent', 0)->get(); 
+1

Soweit ich weiß, gibt $ menu-> menuItems() eine HasMany-Instanz zurück. Die where() - Methode in der HasMany-Klasse oder ihren Eltern kann jedoch nicht gefunden werden. Wer weiß, welche where() -Methode aufgerufen wird? Ich bin neugierig, da PHPStorm eine Warnung gibt, dass die Wo-Methode nicht existiert. –

+0

In Laravel 5 funktioniert die direkte Verknüpfung von where-Klausel in Beziehungen: return $ this-> hasMany ('MenuItem') -> wo ('parent', $ parent) -> get(); – mshakeel

+0

Das funktioniert gut – Oussaki

1

Ich bin nicht sicher der Abfrage Teil, aber zuerst würde nicht übergeben eine 0 an die Funktion immer noch die $ Elternvariable als falsch? Überprüfen Sie also, ob der $ parent nicht null ist.

public function menuItems($parent = null){ 
    if(!$parent == null)){ 
     $menuItems = $this->hasMany('MenuItem')->where('parent',$parent); 
    }else{ 
     $menuItems = $this->hasMany('MenuItem'); 
    } 
    return $menuItems; 
} 
-1

In PHP 0 = FALSCH, dies ändern

if ($ parent) {

für dieses

if ($ parent! == false) {