我正在使用PHP编写带有MVC框架的API,并且我正在使用Eloquent ORM。
我的应用程序有一些模型最终通过关系表链接,但打算以分散的方式创建。
这些关系表是否有自己的模型,或者相关的模型是否有创建链接的方法?
答案 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,这些类型的额外字段不需要他们自己的模型,可以通过上面记录的各种方法访问它们。