Laravel 4:数据透视表或ID

时间:2014-01-26 07:54:52

标签: php mysql laravel laravel-4 eloquent

users
id
email
password
created_at
updated_at

tasks
id
name
created_at
updated_at

我应该创建数据透视表(users_tasks),还是只在user_id表中添加tasks字段?我想使用Eloquent驱动程序,但我不确定哪种方法最适合这种关系......

  

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

根据Laravel文档中的引用,可以理解在这种情况下,不需要数据透视表......因为每个task仅由一个user拥有。 ..这是正确的思维方式吗?

1 个答案:

答案 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