Laravel Eloquent polymorphe un-à-un ?
-
21-12-2019 - |
Question
J'essaie de configurer une relation polymorphe un-à-un (l'équivalent polymorphe de has_one et appartient_to). J'ai un Address
modèle, et il existe plusieurs autres modèles pour lesquels je souhaite avoir une seule adresse.Cependant, je suis confus par le libellé des documents.j'ai vu le morphMany
méthode, mais ma question est la suivante :devrais-je utiliser morphMany
même si je veux seulement qu'il ait une seule adresse, ou y a-t-il quelque chose comme un morphOne
méthode que je devrais utiliser ?
MODIFIER:Mon Address
le modèle a ces champs, juste pour aider à visualiser :
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');
});
La solution
Oui, il y a un morphOne méthode et je pense que c'est celle que vous devriez utiliser dans ce cas : https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 .
Vous pouvez également utiliser
$table->morphs('addressable');
au lieu de
$table->integer('addressable_id');
$table->string('addressable_type');
J'ai utilisé morphOne dans un package personnalisé pour L4 et fonctionne plutôt bien.
Autres conseils
Essayez celui-ci, je pense que c'est mieux que morphOne qui n'est pas pris en charge.
public function address()
{
return $this->hasOne('App\Address', 'addressable_id','id')
->where('addressable_type', 'App\Model');
}