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

Should some relationship tables have their own models?

我正在 PHP 中使用 MVC 框架编写 API,我正在使用 Eloquent ORM。

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

这些关系表应该有自己的模型,还是相关的模型应该有创建链接的方法?

对于 Eloquent,对于具有多对多关系的中间或枢轴 table,您不需要创建额外的模型。

您应该始终使用 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');
    }
}

他们有多种方法可以使用此关系向数据透视表添加或更新项目 table,包括附加、分离或同步,在此处记录: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]);

数据透视表上的额外字段 table 当您拥有与关系相关但与相关模型无关的数据(如时间戳)时很重要。

我能想到的一个例子是,如果您想维护商店经理的历史记录。您不仅需要 store_id 和 manager_id,还需要 started_at 和 ended_at 时间戳。这将允许您查看谁现在在管理一家商店,以及谁在过去管理一家商店。

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