users
id
email
password
created_at
updated_at
tasks
id
name
created_at
updated_at
我应该创建数据透视表(users_tasks
),还是仅user_id
在tasks
表中放置一个字段?我想使用Eloquent驱动程序,但是我不确定哪种方法最适合此类关系...
多对多关系是更复杂的关系类型。这种关系的一个示例是具有多个角色的用户,其中这些角色也由其他用户共享。例如,许多用户可能具有“管理员”角色。
从Laravel文档中的引用可以看出,在这种情况下,不需要数据透视表...因为每个数据透视表task
仅由一个人拥有user
...是正确的思维方式吗?
正确,如果每个任务仅由一个用户拥有,那么将user_id列添加到任务表将是最简单的选项,并且将在模型中建立关系,如下所示:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句