Получить много ко многим из полиморфной таблицы ID - PullRequest
0 голосов
/ 20 мая 2018

Используя Laravel 5.1, как я могу получить Dialogs из отношения M:M с Полиморфной таблицей.

Когда я загружаю tasks, загружается соответствующий npc.Это соотношение между tasks и npcs является полиморфным отношением.

Итак, я создал другую таблицу M:M, dialog_npcseventsmorphable, которая связывает dialog_id с таблицей npcs_events_morphable_id на npcs_events_morphable, но она не загружает dialogs.

$task = Task::findOrFail(1);

npcs_events_morphable:

 id | npc_id | morphable_id | morphable_type |     created_at      |     updated_at      |    published_at     
----+--------+--------------+----------------+---------------------+---------------------+---------------------
  1 |      1 |            1 | App\Task       | 2018-05-20 04:45:24 | 2018-05-20 04:45:24 | 2018-05-20 04:45:24
  2 |      2 |            1 | App\Activity   | 2018-05-20 04:45:24 | 2018-05-20 04:45:24 | 2018-05-20 04:45:24
  3 |      3 |            1 | App\Battle     | 2018-05-20 04:45:24 | 2018-05-20 04:45:24 | 2018-05-20 04:45:24

dialog_npcseventsmorphable:

 dialog_id | npcs_events_morphable_id (<-- id on 'npcs_events_morphable' table)
-----------+--------------------------
         1 |                        1
         2 |                        1
         3 |                        2
         4 |                        2
         5 |                        3
         6 |                        3
         7 |                        3
         8 |                        3
         9 |                        3

Задача:

class Task extends BaseModel
{
    protected $with = ['npcs', ...];

    public function npcs()
    {
        return $this->morphToMany('App\Npc', 'morphable', 'npcs_events_morphable');
    }
}

NPC:

class Npc extends BaseModel
{
    public function tasks()
    {
        return $this->morphedByMany('App\Task', 'morphable', 'npcs_events_morphable');
    }
    ...
}

Диалог:

class Dialog extends BaseModel
{
    public function npcs()
    {
        return $this->belongsToMany(NpcsEventsMorphable::class, 'dialog_npcseventsmorphable');
    }
    ...
}

NpcsСобытияМорпируемый:

class NpcsEventsMorphable extends BaseModel
{
    protected $table = 'npcs_events_morphable';

    protected $with = ['dialogs'];

    public function dialogs()
    {
        return $this->belongsToMany(Dialog::class, 'dialog_npcseventsmorphable');
    }
}

}

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