关系属于Laravel中具有双主键的表
我需要在数据库中存储用户每周的工作时间。例如,用户在星期一从上午8:00到下午17:00工作,星期二从上午9:00到上午11:00工作 为此,我创建了两个表: 用户(id、用户名、ecc…) 以“用户id”和“日期”作为主键的小时数(用户id、天、开始、结束) 而不是创建另一个名为Days的表,该表只有7条记录(每天一条)。关系属于Laravel中具有双主键的表,laravel,Laravel,我需要在数据库中存储用户每周的工作时间。例如,用户在星期一从上午8:00到下午17:00工作,星期二从上午9:00到上午11:00工作 为此,我创建了两个表: 用户(id、用户名、ecc…) 以“用户id”和“日期”作为主键的小时数(用户id、天、开始、结束) 而不是创建另一个名为Days的表,该表只有7条记录(每天一条)。 我的问题是如何定义与laravel的关系,事实上,如果我使用三个表,我可以使用多对多关系,但是如果我使用这种形式,我如何能够指定“day”列是一个键?我建议以下表结构为小时
我的问题是如何定义与laravel的关系,事实上,如果我使用三个表,我可以使用多对多关系,但是如果我使用这种形式,我如何能够指定“day”列是一个键?我建议以下表结构为
小时
id (primary key, auto-increment)
user_id
day (NOT primary key, values from 1-7)
start
end
然后,您可以在user\u id
和day
的组合上添加唯一索引
SQL:ALTER TABLE hours ADD UNIQUE_user_day(用户id,day)代码>
Laravel模式生成器(迁移):$table->unique(数组('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);
您甚至可以使用工作日的常量…而不是day
作为主键使用它来标记日期(int 1-7)也许?是的,day列是一个整数,但我的问题是定义关系方法。我刚刚阅读了完整的标题。。。没有双主键这样的东西。你说的是复合键吗?我认为主键由两列组成:)酷!不知道$table->unique(数组('x','y'));可能!是的,不幸的是文档中没有。在浏览Laravels源代码时发现它。。。