Frage

Ich versuche, eine polymorphe Eins-zu-Eins-Beziehung einzurichten (das polymorphe Äquivalent von has_one und gehört_zu). Ich habe eine Address Modell, und es gibt mehrere andere Modelle, für die ich eine Adresse haben möchte.Der Wortlaut der Dokumente verwirrt mich jedoch.Ich habe das gesehen morphMany Methode, aber meine Frage ist:Sollte ich es benutzen morphMany obwohl ich möchte, dass es nur eine Adresse hat, oder gibt es so etwas wie eine morphOne Welche Methode sollte ich verwenden?

BEARBEITEN:Mein Address Das Modell verfügt über diese Felder, nur um die Visualisierung zu erleichtern:

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');
});
War es hilfreich?

Lösung

Ja, es gibt eine morphOne Methode und ich denke, das ist die, die Sie in diesem Fall verwenden sollten: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 .

Sie können es auch verwenden

$table->morphs('addressable');

anstatt

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

Ich habe morphOne in einem benutzerdefinierten Paket für L4 verwendet und funktioniert ziemlich gut.

Andere Tipps

Probieren Sie dieses aus, ich denke, das ist besser als MorphOne, das nicht unterstützt wird.

  public function address()
  {
      return $this->hasOne('App\Address', 'addressable_id','id')
                   ->where('addressable_type', 'App\Model');
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top