我有3张桌子,分别是A,B和C.
所有这三个都需要使用一个音符表(即A有很多音符,一个音符属于A.剩下的两个表也是如此)。
所以我又创建了3个表:A_note,B_note和C_note(如这里提到的:multiple tables need one to many relationship)。
有没有办法对这些表(A_note,B_note和C_note)执行CRUD操作,类似于我们在多对多关系中处理数据透视表的方式?
请建议前进的方向。
答案 0 :(得分:1)
您应该使用polymorphic
关系。它允许多个模型使用单个表。
Have a look at the documentation here
在您的特定情况下,您的每个表都会引用noteable_id
列和noteable_type
。
noteable_id
将包含(A/B/C)
模型的ID。
noteable_type
将包含模型(A/B/C)
的字符串名称。
(A/B/C)
模型现在将获得一个新属性:
/**
* (A/B/C) Model(s)
*/
public function notes()
{
return $this->morphMany('App\Notes', 'noteable');
}
note
模型会针对用于标识您的polymorphic ids and types
的属性名称启动它的多态属性:
/**
* Note Model
*/
public function noteable()
{
return $this->morphTo();
}
现在您只需在->noteable
模型上调用(A/B/C)
,它们共享1个表,而不需要每个表的另一个数据透视表。