È 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
?
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
awsm @alexrussell. mi ha salvato un mal di testa .... –
Contento il mio consiglio dal 2014 è ancora rilevante :) – alexrussell