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');
});
Était-ce utile?

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');
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top