Pregunta

Estoy intentando configurar una relación polimórfica uno a uno (el equivalente polimórfico de tiene_uno y pertenece_a). Tengo una Address modelo, y hay varios otros modelos que quiero tener una dirección.Sin embargo, estoy confundido por la redacción de los documentos.he visto el morphMany método, pero mi pregunta es:¿debería usar? morphMany aunque solo quiero que tenga una dirección, ¿o hay algo así como una morphOne método que debería utilizar?

EDITAR:Mi Address El modelo tiene estos campos, solo para ayudar 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');
});
¿Fue útil?

Solución

Sí, hay un morfouno método y creo que es el que deberías usar en este caso: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 .

También puedes usar

$table->morphs('addressable');

en lugar de

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

He usado morphOne en un paquete personalizado para L4 y funciona bastante bien.

Otros consejos

Pruebe este, creo que es mejor que morphOne que no es compatible.

  public function address()
  {
      return $this->hasOne('App\Address', 'addressable_id','id')
                   ->where('addressable_type', 'App\Model');
  }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top