【发布时间】:2016-11-29 22:09:29
【问题描述】:
我正在 Laravel 5 中创建一个应用程序。
我正在创建的应用是一个招聘网站,候选人必须填写许多表格。因为有很多字段,所以我决定将users 表逻辑划分为许多具有一对一关系的较小表。
例如,两个这样的表可能如下所示:
用户
- 身份证
- 角色(例如管理员或候选人)
- 名字
- 姓
- dob
driving_licences
- 身份证
- user_id(对用户的 FK)
- has_licence
- number_of_points
- licence_number
在上述简单情况下,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 之间存在一对一的关系。
【问题讨论】:
-
这可能不是最好的方法,但可以让你走上正轨:在你的
User模型中创建一个函数来检查许可证是否为空。如果是,请为用户创建并保存新许可证。$user->checkLicense()。在checkLicense()中检查null,创建或获取许可证,然后返回许可证。需要明确的是,这减少了不断重写许可证检查并将其移动到模型中的函数的需要。 -
此外,“强制”所需许可证的一个想法是在用户创建时创建一个空许可证以在保存用户时保存。然后,您可以填写正确的数据。您将不再需要检查许可证是否存在,因为您将在创建用户时创建它。