我需要在数据库中存储用户的每周小时数。例如,用户A工作在星期一上午8:00到下午17:00,星期二上午9:00到11:00上午...
为此,我创建了两个表: 用户(id,username,ecc ...) 小时(user_id,day,start,end)与" user_id"和" day"作为主键。
而不是创建另一个名为Days的表,只有7条记录(每天一条记录)。 我的问题是用laravel定义关系,实际上如果我使用三个表我可以使用多对多关系,但是如果我使用这个表单我怎么能具体说明" day"列是关键?
答案 0 :(得分:3)
我建议遵循Hours
id (primary key, auto-increment)
user_id
day (NOT primary key, values from 1-7)
start
end
然后,您可以在user_id
和day
的组合上添加唯一索引。
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);
你甚至可以在工作日使用常数......