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');
});
.

È stato utile?

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');
  }
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top