2014-01-26 79 views
0
users 
id 
email 
password 
created_at 
updated_at 

tasks 
id 
name 
created_at 
updated_at 

应创建一个数据透视表(users_tasks),或者只是把tasks表内的user_id场?我想使用Eloquent驱动程序,但我不确定哪种方法最适合这种类型的关系...Laravel 4:透视表,或ID

多对多关系是一种更复杂的关系类型。这种关系的一个例子是具有许多角色的用户,其中 角色也由其他用户共享。例如,许多用户可能具有“管理员”的角色 。

从Laravel文档上报价,按理说,在这种情况下,没有必要对数据透视表...因为每个task仅由单一的国有user ......是的正确的思维方式?

回答

2

正确的,如果每个任务只曾经由单个用户,然后添加一个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,表示用户是所有者或项目已分配给他们。然后,您将更改User model tasks方法以返回$ this-> hasMany关系。

如果您要添加的数据不仅仅是任务和用户ID,还需要在关系定义中包含数据透视表字段详细信息。

return $this->belongsToMany('Task')->withPivot('status_id'); 

看到http://laravel.com/docs/eloquent#working-with-pivot-tables

+0

感谢您的回答!我很好奇......假设我想允许用户与其他用户“分享”任务......数据透视表是否会发挥作用? – dcolumbus

+0

看到我的编辑的一些额外的细节回复此 – glendaviesnz