Pergunta

Estou tentando configurar um relacionamento polimórfico um-para-um (o equivalente polimórfico de has_one e pertence_to). Address modelo, e tem vários outros modelos que quero que tenham um endereço só.No entanto, estou confuso com o texto dos documentos.Eu vi o morphMany método, mas minha pergunta é:devo usar morphMany mesmo que eu queira que tenha apenas um endereço, ou haja algo como um morphOne método que eu deveria usar?

EDITAR:Meu Address model possui estes campos, apenas para ajudar a visualizar:

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');
});
Foi útil?

Solução

Sim, existe um morfoOne método e acho que é o que você deve usar neste caso: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 .

Você também pode usar

$table->morphs('addressable');

em vez de

$table->integer('addressable_id');
$table->string('addressable_type');

Usei o morphOne em um pacote personalizado para L4 e funciona muito bem.

Outras dicas

Experimente este, acho que é melhor do que o morphOne que não é compatível.

  public function address()
  {
      return $this->hasOne('App\Address', 'addressable_id','id')
                   ->where('addressable_type', 'App\Model');
  }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top