一些关系表应该有自己的模型吗?

时间:2017-01-06 18:52:23

标签: php model eloquent many-to-many relationship

我正在使用PHP编写带有MVC框架的API,并且我正在使用Eloquent ORM。

我的应用程序有一些模型最终通过关系表链接,但打算以分散的方式创建。

这些关系表是否有自己的模型,或者相关的模型是否有创建链接的方法?

1 个答案:

答案 0 :(得分:1)

使用Eloquent,对于具有多对多关系的中间或数据透视表,您不需要创建其他模型。

您应该始终使用belongsToMany()方法设置相关模型的关系,如下所示:https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

class User extends Model
{
    /**
     * The roles that belong to the user.
     */
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

他们有各种方法然后使用此关系向数据透视表添加或更新项目,包括此处记录的附加,分离或同步:https://laravel.com/docs/5.3/eloquent-relationships#updating-many-to-many-relationships

$user = App\User::find(1);
$user->roles()->attach($roleId);

您还可以将数据添加到额外字段:

$user->roles()->attach($roleId, ['expires' => $expires]);

当您拥有与关系相关的数据(如时间戳)而不是任何相关模型时,数据透视表上的额外字段非常重要。

我能想到的一个例子是,如果你想保持商店经理的历史。你不会想要store_id和manager_id,你也需要一个started_at和ends_at时间戳。这样您就可以查看现在管理商店的人员,以及过去管理商店的人员。

使用Eloquent,这些类型的额外字段不需要他们自己的模型,可以通过上面记录的各种方法访问它们。