关系属于Laravel中具有双主键的表

关系属于Laravel中具有双主键的表,laravel,Laravel,我需要在数据库中存储用户每周的工作时间。例如,用户在星期一从上午8:00到下午17:00工作,星期二从上午9:00到上午11:00工作 为此,我创建了两个表: 用户(id、用户名、ecc…) 以“用户id”和“日期”作为主键的小时数(用户id、天、开始、结束) 而不是创建另一个名为Days的表,该表只有7条记录(每天一条)。 我的问题是如何定义与laravel的关系,事实上,如果我使用三个表,我可以使用多对多关系,但是如果我使用这种形式,我如何能够指定“day”列是一个键?我建议以下表结构为小时

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

为此,我创建了两个表: 用户(id、用户名、ecc…) 以“用户id”和“日期”作为主键的小时数(用户id、天、开始、结束)

而不是创建另一个名为Days的表,该表只有7条记录(每天一条)。
我的问题是如何定义与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源代码时发现它。。。