Используя 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');
}
}
}