Laravel:强制执行一对一关系
我正在Laravel 5中创建一个应用程序 我正在创建的应用程序是一个招聘网站,应聘者必须填写许多表格。因为有很多字段,所以我决定在逻辑上将Laravel:强制执行一对一关系,laravel,laravel-5,Laravel,Laravel 5,我正在Laravel 5中创建一个应用程序 我正在创建的应用程序是一个招聘网站,应聘者必须填写许多表格。因为有很多字段,所以我决定在逻辑上将users表划分为许多具有一对一关系的较小表 例如,两个这样的表可能如下所示: 用户 身份证 角色(如管理员或候选人) 名字 姓 多巴哥 驾驶执照 身份证 用户id(FK到用户) 有执照吗 点数 牌照号码 在上述简单的情况下,用户与驾驶执照有一对一的关系。换句话说,每个用户车型必须有一个对应的驾驶执照车型 创建上表和相应的雄辩模型非常简单。然而,我正
users
表划分为许多具有一对一关系的较小表
例如,两个这样的表可能如下所示:
用户
- 身份证
- 角色(如管理员或候选人)
- 名字
- 姓
- 多巴哥
- 身份证
- 用户id(FK到用户)
- 有执照吗
- 点数
- 牌照号码
用户
与驾驶执照
有一对一的关系。换句话说,每个用户
车型必须有一个对应的驾驶执照
车型
创建上表和相应的雄辩模型非常简单。然而,我正在努力寻找最好的方法来强制每个用户(或每个候选用户)都有相应的驾驶执照
我目前的解决方案是,每当我使用DrivingLicense
中的内容时,我首先检查关系是否存在,如果不喜欢,则创建关系:
if ($user->drivingLicence === null) {
$drivingLicence = new DrivingLicence();
$drivingLicence->user_id = $user->id;
$drivingLicence->save();
}
每次我需要使用驾驶执照
时,都必须这样做,这当然会造成大量重复
因此,我的问题是,我如何强制执行Laravel的
用户
和驾驶执照
之间存在一对一的关系。我认为强制用户拥有执照首先是错误的目标。用户完全有可能没有驾驶执照,而不是使用has_license
字段来表示,只是不要为他们创建驾驶执照
在现实世界中考虑一下。没有驾照的人也没有写着没有驾照的卡片。这基本上就是您使用当前数据库模式建模的内容。相反,他们什么都没有,所以省略驾驶执照
记录
然后,您的用户
模型可以有一个方法,如hasDrivingLicense()
,并具有以下实现:
public function hasDrivingLicense()
{
return $this->drivingLicense !== null;
}
我意识到这并不能回答您的直接问题,但这对我来说有点代码味道。这可能不是最好的方法,但可以让您走上正确的轨道:在
用户
模型中创建一个函数,检查许可证是否为空。如果是,请为用户创建并保存新许可证<代码>$user->checkLicense()。在checkLicense()
中检查null
,创建或获取许可证,然后返回许可证。需要明确的是,这减少了不断重写许可证检查的需要,并将其移动到模型内的某个功能。此外,“强制”所需许可证的想法是在用户创建时创建一个空许可证,以便在保存用户时保存。然后在事实发生后,你可以填写适当的数据。您不再需要检查许可证是否存在,因为您将在创建用户时创建许可证。对于本例,确定是。但对于其他一些表,如next\u of_kin
或documents
,这一点很重要。