Laravel eloquente polimorfico uno a uno?
-
21-12-2019 - |
Domanda
Sto cercando di configurare una relazione polimorfana a uno a uno (l'equivalente polimorfico di has_one e appartiene a). Ho ottenuto un modello Address
, e ci sono molti altri modelli che voglio avere un indirizzo.Tuttavia, sono confuso dalla formulazione dei documenti.Ho visto il metodo morphMany
, ma la mia domanda è: dovrei usare morphMany
anche se voglio solo che abbia solo un indirizzo o c'è qualcosa come un metodo morphOne
che dovrei usare?
Modifica: il mio modello Address
ha questi campi, solo per aiutare a visualizzare:
Schema::create('addresses', function ($table)
{
$table->increments('id');
$table->string('street');
$table->string('street_more')->nullable();
$table->string('city');
$table->string('state')->nullable();
$table->string('country');
$table->string('postal_code');
$table->integer('addressable_id');
$table->string('addressable_type');
});
. Soluzione
Sì, c'è un metodo morphone e penso che sia quello che dovresti usare in questo caso: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/eloquent/Model.php#L811 .
Inoltre puoi usare
$table->morphs('addressable');
.
invece di
$table->integer('addressable_id');
$table->string('addressable_type');
.
Ho usato il morphone in un pacchetto personalizzato per L4 e funziona abbastanza bene.
Altri suggerimenti
Prova questo, penso che questo sia meglio del morphone che non supportato.
public function address()
{
return $this->hasOne('App\Address', 'addressable_id','id')
->where('addressable_type', 'App\Model');
}
.