Laravel Eloquent متعدد الأشكال واحد لواحد؟
-
21-12-2019 - |
سؤال
أحاول إعداد علاقة متعددة الأشكال من رأس إلى واحد (المعادل متعدد الأشكال لـ has_one و owns_to). لقد حصلت على Address
نموذج، وهناك العديد من النماذج الأخرى التي أريد أن يكون لها عنوان واحد.ومع ذلك، فأنا في حيرة من أمري بشأن صياغة المستندات.لقد رأيت morphMany
الطريقة ولكن سؤالي هو:هل ينبغي أن أستخدم morphMany
على الرغم من أنني أريد أن يكون له عنوان واحد فقط، أم أن هناك شيئًا مثل morphOne
الطريقة التي يجب أن أستخدمها؟
يحرر:لي Address
يحتوي النموذج على هذه الحقول، فقط للمساعدة في تصور:
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');
});
المحلول
نعم، هناك morphOne الطريقة وأعتقد أنها الطريقة التي يجب عليك استخدامها في هذه الحالة: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L811 .
كما يمكنك استخدام
$table->morphs('addressable');
بدلاً من
$table->integer('addressable_id');
$table->string('addressable_type');
لقد استخدمت morphOne في حزمة مخصصة لـ L4 ويعمل بشكل جيد.
نصائح أخرى
جرب هذا، أعتقد أن هذا أفضل من morphOne غير المدعوم.
public function address()
{
return $this->hasOne('App\Address', 'addressable_id','id')
->where('addressable_type', 'App\Model');
}