2013-06-27 18 views
5

Non sono sicuro se questo è il modo corretto per aggiungere una query aggiuntiva all'argomento hasMany ma non ha avuto esito positivo. È possibile?Laravel 4 hasMany with WHERE clausola

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

Quando richiamate utilizzando

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

Questo sembra solo per restituire un array vuoto quando viene passato un genitore. Anche se i dati con MenuItem-> parent = 0 esiste

Ho bisogno di qualche modo distinguere sto chiedendo i miei oggetti legati "padre" e non i modelli principali "padre"

+0

Puoi pubblicare il layout tavolo? Non sono in grado di dire cosa sta succedendo qui .. La tua tabella figlia dovrebbe avere solo un riferimento alla riga genitore. Il tuo '-> hasMany()' da CHILD a PARENT è ciò che fa riferimento. Potrebbe essere necessario fornire il secondo argomento che definisce la chiave di relazione genitore-figlio. –

risposta

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

Chiamato con

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

Per quanto ne so $ menu-> menuItems() restituisce un'istanza HasMany. Non riesco a trovare il metodo where() nella classe HasMany o i suoi genitori però. Qualcuno sa quale metodo where() viene chiamato? Sono curioso dal momento che PHPStorm dà un avvertimento che il metodo where non esiste. –

+0

In Laravel 5, il collegamento di una clausola where direttamente nelle relazioni funziona pure: return $ this-> hasMany ('MenuItem') -> where ('parent', $ parent) -> get(); – mshakeel

+0

Funziona bene – Oussaki

1

Non sono sicuro su la parte della query ma inizialmente non passerebbe uno 0 alla funzione registra ancora la variabile $ parent come falsa? Quindi forse controlla se il $ parent non è nullo.

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 = FALSE, modificare questo

if ($ genitore) {

per questo

if ($ genitore! == false) {