In Laravel 5.6 una relazione Illuminate\Database\Eloquent\Relations\BelongsTo
ha avuto la capacità di supportare i modelli predefiniti. Ciò consente un modello che verrà restituito se la relazione è vuota.
La maggior parte del codice per farlo vive nel tratto Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels
, che usa la relazione BelongsTo
.
Ecco un esempio di un metodo nella relazione che chiama il metodo getDefaultFor
dal tratto:
/**
* Get the results of the relationship.
*
* @return mixed
*/
public function getResults()
{
return $this->query->first() ?: $this->getDefaultFor($this->parent);
}
Il metodo getDefaultFor
esiste solo nel tratto. Non è definito sulla classe stessa. Per qualche ragione ho sempre avuto l'impressione che questo non sia "corretto". In altre parole, se dovessi rimuovere il tratto, la classe si spezzerebbe. La classe non dovrebbe avere una sorta di metodo di fallback getDefaultFor
definito su di esso che il tratto può sovrascrivere?
Mi rendo conto che questa è una domanda estremamente acuta e non ha molta importanza dal momento che il codice funziona, ma sto solo cercando di capire da una prospettiva di progettazione del codice se questo è il modo corretto di fare le cose.
Qualcuno ha qualche idea su questo?