使用Laravel 5.1,如何从与多态表的Dialogs
关系中获取M:M
。
加载tasks
时,会加载相应的npc
。 tasks
和npcs
之间的这种关系是多态关系。
所以我创建了另一个M:M
表dialog_npcseventsmorphable
,它将dialog_id
链接到npcs_events_morphable_id
表上的npcs_events_morphable
,但它没有加载{ {1}}。
dialogs
npcs_events_morphable:
$task = Task::findOrFail(1);
dialog_npcseventsmorphable:
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_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
NPC:
class Task extends BaseModel
{
protected $with = ['npcs', ...];
public function npcs()
{
return $this->morphToMany('App\Npc', 'morphable', 'npcs_events_morphable');
}
}
对话框:
class Npc extends BaseModel
{
public function tasks()
{
return $this->morphedByMany('App\Task', 'morphable', 'npcs_events_morphable');
}
...
}
NpcsEventsMorphable:
class Dialog extends BaseModel
{
public function npcs()
{
return $this->belongsToMany(NpcsEventsMorphable::class, 'dialog_npcseventsmorphable');
}
...
}
}