Получить все отношения во многих полиморфных многих - PullRequest
0 голосов
/ 25 апреля 2018

Я знаю, что полиморфные отношения «многие ко многим» возможны. Тем не менее, учебники указывают на то, что каждая таблица будет находиться в отдельном отношении (функция).

Однако мне нужен способ создания полиморфных отношений «многие ко многим», в которых я могу получить все их отношения, даже если они из нескольких таблиц.

Пример:

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');
}

Это та часть, где я больше не знаю, что поставить.

1 Ответ

0 голосов
/ 25 апреля 2018

Я нашел решение этой проблемы. Но вместе с этим у меня есть небольшая проблема.

Во-первых, в своей таблице журнала я поместил отношение hasMany через сводную таблицу и загрузил «relatedTables»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...