¿Laravel elocuente polimórfico uno a uno?
-
21-12-2019 - |
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');
});
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');
}