我有两个表,employees
和employee types
。
employees
有以下字段
- id (PK)
- employee_type_id(颗) <
- 名称/gh>
和employee_type
有以下字段,
- id (PK) 标题
我的雄辩模型函数是,
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();
两种方法都可以正常工作。
这两种插入类型的区别是什么?
哪个是最好的方法?
在比较这些选项之前,还有第三个选项:
只使用id
的associate()
$emp->employeeTypes()->associate($request->employee_types_id);
现在让我们来看看这些方法的优缺点:
1。手动设置外键
- Pro:这是最简单的方法
- Contra:你必须显式地使用外键列名
2。使用associate()
和模型
- Pro:关系将自动设置,因此您可以稍后使用模型,而无需首先从数据库中获取模型
- Pro:外键列的名称无关紧要(只需要在关系声明中定义)
- Contra:需要额外的查询来首先获取相关模型
3。使用id为
的associate()
- Pro:外键列的名称无关紧要(只需要在关系声明中定义)
- Contra:关联id后关系不会被加载。当您访问
$emp->employeeTypes
时,将运行查询。
我个人更喜欢使用associate()
(基本上所有的关系方法,即使它们并不总是必要的)。如果我已经有了模型,我就传递它,否则我就使用id。您已经定义了与外键等的关系,因此不妨使用它