我正在Laravel 5中创建一个应用程序。
我创建的应用是一个招聘网站,候选人必须填写多种表格。因为有很多字段,所以我决定将users
表逻辑分区为许多较小的表,并且具有一对一的关系。
例如,两个这样的表可能如下所示:
用户
driving_licences
在上述简单案例中,users
与driving_licences
的关系具有一对一关系。换句话说,每个User
模型必须有一个对应的DrivingLicence
模型。
创建上表和相应的Eloquent模型非常简单。但是,我正在努力强制执行每个用户(或每个候选用户)都有相应的DrivingLicence
的最佳方法。
我目前的解决方案是,每当我使用DrivingLicence
中的内容时,我首先检查关系是否存在,如果它不是这样的话,请创建它:
if ($user->drivingLicence === null) {
$drivingLicence = new DrivingLicence();
$drivingLicence->user_id = $user->id;
$drivingLicence->save();
}
每次我需要对DrivingLicence
做一些事情时都必须这样做,这当然会造成很多重复。
因此,我的问题是,如何强制执行Laravel中users
和driving_licences
之间的一对一关系。
答案 0 :(得分:0)
我认为强制用户拥有许可证首先是错误的目标。用户完全有可能没有驾驶执照,而不是使用has_license
字段来表示,只是不为他们创建驾驶执照。
在现实世界中考虑它。没有驾驶执照的人也没有卡片说他们没有驾驶执照。这基本上就是您使用当前数据库模式进行建模的内容。相反,他们只是没有任何东西,所以省略driving_licenses
记录。
您的User
模型可以使用hasDrivingLicense()
这样的方法,具有以下实现:
public function hasDrivingLicense()
{
return $this->drivingLicense !== null;
}
我意识到这并没有回答你的直接问题,但这对我来说是一种代码味道。