2014-04-11 18 views
7

È possibile passare, in qualche modo, un parametro a una funzione di relazione?Laravel: passa il parametro alla funzione di relazione?

devo attualmente i seguenti:

public function achievements() 
{ 
    return $this->belongsToMany('Achievable', 'user_achievements')->withPivot('value', 'unlocked_at')->orderBy('pivot_unlocked_at', 'desc'); 
} 

Il problema è che, in alcuni casi, non recuperare la colonna unlocked_at e restituisce un errore.

ho cercato di fare qualcosa di simile:

public function achievements($orderBy = true) 
{ 
$result = $this->belongsToMany (...) 
if($orderBy) return $result->orderBy(...) 
return $result; 
} 

e chiamarlo come:

$member->achievements(false)->(...) 

Ma questo non funziona. C'è un modo per passare i parametri in quella funzione o un modo per controllare se viene utilizzato lo pivot_unlocked_at?

+4

Si dovrebbe andare bene per fare quello che stai dicendo. È necessario ricordare tuttavia che le funzioni di relazione agiscono in modo diverso se le si chiama come metodo sulle proprietà. Se li usi come proprietà ottieni un set di risultati (Collezione), ma se li chiami come metodi ottieni un generatore di query. Se vuoi passare dei parametri a loro devi ovviamente chiamarli come metodi, quindi assicurati di fare un '-> get()' nel tuo codice chiamante: '$ member-> achievements (true) -> get() -> (...) 'sarebbe equivalente a' $ member-> achievements -> (...) '. – alexrussell

+0

awsm @alexrussell. mi ha salvato un mal di testa .... –

+0

Contento il mio consiglio dal 2014 è ancora rilevante :) – alexrussell

risposta

3

Bene, quello che ho fatto è stato solo aggiungere un nuovo attributo al mio modello e quindi aggiungere le mie condizioni a quell'attrauto, semplicemente l'ho fatto.

Class Foo extends Eloquent { 
    protected $strSlug; 

    public function Relations(){ 
     return $this->belongsTo('Relation','relation_id')->whereSlug($this->strSlug); 
    } 
} 

Class FooController extends BaseController { 
    private $objFoo; 


    public function __construct(Foo $foo){ 
     $this->objFoo = $foo 
    } 

    public function getPage($strSlug){ 
     $this->objFoo->strSlug = $strSlug; 
     $arrData = Foo::with('Relations')->get(); 
     //some other stuff,page render,etc.... 
    } 
} 
Problemi correlati