Laravel Eloquent polymorph eins zu eins?
-
21-12-2019 - |
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');
});
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');
}