Relation属于Laravel中具有双主键的表

时间:2014-12-15 20:25:17

标签: laravel

我需要在数据库中存储用户的每周小时数。例如,用户A工作在星期一上午8:00到下午17:00,星期二上午9:00到11:00上午...

为此,我创建了两个表: 用户(id,username,ecc ...) 小时(user_id,day,start,end)与" user_id"和" day"作为主键。

而不是创建另一个名为Days的表,只有7条记录(每天一条记录)。 我的问题是用laravel定义关系,实际上如果我使用三个表我可以使用多对多关系,但是如果我使用这个表单我怎么能具体说明" day"列是关键?

1 个答案:

答案 0 :(得分:3)

我建议遵循Hours

的表结构
id        (primary key, auto-increment)
user_id 
day       (NOT primary key, values from 1-7)
start
end

然后,您可以在user_idday的组合上添加唯一索引。

SQL:ALTER TABLE hours ADD UNIQUE unique_user_day (user_id, day);

Laravel架构构建器(迁移):$table->unique(array('user_id', 'day'));

之后你只需要一个正常的关系。没什么好看的。

public function hours(){
    return $this->hasMany('Hours');
}

这是你获得所有时间的方式

$hours = Users::find(1)->hours;

然后,当您需要特定日期时,请添加where语句

$tuesday = Users::find(1)->hours()->where('day', 2)->get();

或者,对于更好的语法,您可以为用户建模功能

public function day($number){
    return $this->hours()->where('day', $number)->get();
}

$tuesday = Users::find(1)->day(2);

你甚至可以在工作日使用常数......