users
id
email
password
created_at
updated_at
tasks
id
name
created_at
updated_at
我应该创建数据透视表(users_tasks
),还是只在user_id
表中添加tasks
字段?我想使用Eloquent驱动程序,但我不确定哪种方法最适合这种关系......
多对多关系是一种更复杂的关系类型。一个 这种关系的一个例子是具有许多角色的用户,其中 角色也由其他用户共享。例如,许多用户可能拥有 “管理员”的角色。
根据Laravel文档中的引用,可以理解在这种情况下,不需要数据透视表......因为每个task
仅由一个user
拥有。 ..这是正确的思维方式吗?
答案 0 :(得分:2)
正确,如果每个任务只由一个用户拥有,那么将一个user_id列添加到tasks表将是最简单的选项,并且这些关系将在模型中设置如下:
class User extends Eloquent {
public function tasks()
{
return $this->hasMany('Task');
}
}
class Task extends Eloquent {
public function user()
{
return $this->belongsTo('User');
}
}
修改
如果您计划在任何阶段允许多个用户访问任务,例如。如果您希望所有者能够将任务分配给其他人,那么您最好使用数据透视表。您可以在以后添加一个,但如果是计划,可能会更加清洁。除了提供关系之外,数据透视表还可以包括用户的状态/访问细节。然后,您将添加一个task_user表,如:
task_user
-task_id
-user_id
-status_id
使用status_id指示用户是所有者还是已为其分配了项目。然后,您将更改用户模型任务方法以返回$ this-> hasMany关系。
如果您要向枢轴添加多个任务和用户ID,则需要在关系定义中包含数据透视表字段详细信息,例如。
return $this->belongsToMany('Task')->withPivot('status_id');
请参阅http://laravel.com/docs/eloquent#working-with-pivot-tables