具有一对多关系的多个表(Laravel)

时间:2016-06-20 20:43:21

标签: php mysql laravel eloquent laravel-5.2

我有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操作,类似于我们在多对多关系中处理数据透视表的方式?

请建议前进的方向。

1 个答案:

答案 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个表,而不需要每个表的另一个数据透视表。