我有两张桌子,employees
and employee types
.
employees
有以下字段
and employee_type
有以下字段,
我雄辩的模型函数是,
Employee
class Employee extends Model {
public function employeeTypes() {
return $this->belongsTo('App\Model\EmployeeType');
}
}
EmployeeType
class EmployeeType extends Model {
}
我不确定这是否是维持关系的正确方式。
插入时我可以遵循以下两种方法:
1.设置ID
$emp = new Employee();
$emp->employee_type_id = $request->type_id;
$emp->name = $request->name;
$emp->save();
2.设置关系
$emp->employeeTypes()->associate(EmployeeType::findOrFail($request->employee_types_id));
$emp->name = $request->name;
$emp->save();
两种方法都工作正常。
这两种插入类型有什么区别?
哪种方法最好?
在比较选项之前,还有第三个选项:
Using associate()
仅用 id
$emp->employeeTypes()->associate($request->employee_types_id);
现在让我们看看这些方法的优点和缺点:
1.手动设置外键
- 优点:这是最简单的方法
- 反对:您必须显式使用外键列名称
2. 使用associate()
与模型
- 优点:关系将自动设置,因此您可以稍后使用该模型,而无需先从数据库中获取它
- 优点:外键列的名称并不重要(只需要在关系声明中定义)
- 反对:需要额外的查询来首先获取相关模型
3. 使用associate()
仅用 id
- 优点:外键列的名称并不重要(只需要在关系声明中定义)
- 反:关联id后,关系不会被加载。当您访问时将运行查询
$emp->employeeTypes
我个人更喜欢使用associate()
(基本上所有关系方法,即使它们并不总是必要的)。如果我已经有了模型,我会传递它,否则我将只使用 id。您已经定义了与外键等的关系,因此您不妨使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)