الحصول على جميع العلاقات في متعددة إلى العديد من الأشكال

وأنا أعلم أن علاقة متعددة إلى العديد من متعدد ممكن. ومع ذلك ، فإن البرامج التعليمية تشير لي بطريقة تكون كل جداول في علاقة منفصلة (وظيفة).

ومع ذلك ، فأنا بحاجة إلى طريقة لإنشاء علاقة متعددة الأشكال مع أطراف متعددة ، حيث يمكنني جلب جميع علاقاتها حتى لو كانت من جداول متعددة.

مثال:

Log
->connected_tables (the model relationship)
--> [0] App\User
--> [1] App\User
--> [2] App\Transaction
--> [3] App\Item
--> [4] App\ShippingInformation

الجدول المحوري هو كما يلي:

$table->increments('id');
$table->integer('entity_id')->unsigned();
$table->string('entity_type');
$table->integer('loggable_id')->unsigned();
$table->string('loggable_type');

ثم في نموذج السجل الخاص بي ، أحاول جلبه على أنه:

public function loggable()
{
    return $this->morphToMany('App\????', 'entity', 'activity_log_entity');
}

هذا هو الجزء الذي لا أعرف ما أضعه بعد الآن.

0
تستخدم علاقة أطراف بأطراف عديدة morphToMany. ولكنه يتطلب المعلمة الأولى التي هي نموذج ، ولكن يمكن أن يكون النموذج (النماذج) مختلفًا في إحدى النتائج. return $ this-> morphToMany ('App \ ؟؟؟؟'، 'entity'، 'activity_log_entity')؛
وأضاف المؤلف Jeremy Layson, مصدر
سيحصل ذلك فقط على نوع واحد من الطراز. أريد أن أحضر نماذج متعددة في علاقة واحدة. سوف تكون العلاقة المفترضة جميع الصفوف المتأثرة من إجراء معين. لذلك يمكن أن يكون 1 أو أكثر من الجداول.
وأضاف المؤلف Jeremy Layson, مصدر
لقد قمت بتحديث لنشر العلاقة مع نموذج بلدي الوحيد.
وأضاف المؤلف Jeremy Layson, مصدر
هذا هو الملاذ الأخير ولكن هذا الكثير من المتاعب. جميع الجداول 70+ يمكن أن تكون في العلاقة. لا توجد طريقة سأفعل ذلك يدوياً
وأضاف المؤلف Jeremy Layson, مصدر
عرض الاستعلامات التي تحاول الحصول عليها
وأضاف المؤلف Adnan Mumtaz, مصدر
يمكنك ببساطة استخدام YourModel :: with ('your relationship') -> get()
وأضاف المؤلف Adnan Mumtaz, مصدر
يمكنك نشر النموذج الخاص بك؟
وأضاف المؤلف Adnan Mumtaz, مصدر
كلما أفكر في هذا أكثر أعتقد أنه من غير الممكن القيام بذلك. ربما يمكنك فقط الحصول على كل علاقة morphed ودمج فقط مجموعات النتائج
وأضاف المؤلف apokryfos, مصدر

1 إجابة

لقد وجدت العمل حول هذه المشكلة. لكن لدي مشكلة صغيرة معها

أولاً ، في جدول السجل لدي ، أضع علاقة hasMany من خلال محوري وأحرص على "الجداول ذات الصلة"

public function logs()
{
    return $this->hasMany('App\LogPivot', 'entity_id')->with('relatedTables');
}

ثم قمت بإنشاء نموذج للمحور ووضع هذه العلاقة

public function relatedTables()
{
    return $this->morphTo('loggable');
}

لذا فإن هذا سيجلب جميع محاور السجل ، عندها ستتحول كل محاور إلى كل ما يتم الإشارة إليه.

تكمن المشكلة في أن المحور سيكون أول بدلاً من الجدول الفعلي. كيف يمكنني "سحب" الجدول الفعلي بدلاً من المحور؟

App\LogPivot {#1251
  id: 2,
  entity_id: 573,
  entity_type: "log",
  loggable_id: 3,
  loggable_type: "user",
  created_at: null,
  updated_at: null,
  related_table: null,
  loggable: App\User {#1259
    id: 3,
    name: "Juan",
  },
},

أريد الحصول على التطبيق \ المستخدم مباشرة على علاقته بدلاً من LogPivot أولاً

0
وأضاف