Laravel:强制执行一对一关系

Laravel:强制执行一对一关系,laravel,laravel-5,Laravel,Laravel 5,我正在Laravel 5中创建一个应用程序 我正在创建的应用程序是一个招聘网站,应聘者必须填写许多表格。因为有很多字段,所以我决定在逻辑上将users表划分为许多具有一对一关系的较小表 例如,两个这样的表可能如下所示: 用户 身份证 角色(如管理员或候选人) 名字 姓 多巴哥 驾驶执照 身份证 用户id(FK到用户) 有执照吗 点数 牌照号码 在上述简单的情况下,用户与驾驶执照有一对一的关系。换句话说,每个用户车型必须有一个对应的驾驶执照车型 创建上表和相应的雄辩模型非常简单。然而,我正

我正在Laravel 5中创建一个应用程序

我正在创建的应用程序是一个招聘网站,应聘者必须填写许多表格。因为有很多字段,所以我决定在逻辑上将
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
,这一点很重要。