سؤال

أحاول إعداد علاقة متعددة الأشكال من رأس إلى واحد (المعادل متعدد الأشكال لـ 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');
  }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top