Laravel保存模型时直接设置ID和设置eloquent关联关系有什么区别?
Difference between setting ID directly and setting eloquent associate relation when saving a model in Laravel?
我有两个表,employees
和 employee types
。
employees
有以下字段
- id (PK)
- employee_type_id(FK)
- 姓名
和employee_type
有以下字段,
- id (PK)
- 标题
我的eloquent模型函数是,
Employee
class Employee extends Model {
public function employeeTypes() {
return $this->belongsTo('App\Model\EmployeeType');
}
}
EmployeeType
class EmployeeType extends Model {
}
我不确定这是否是保持关系的正确方式。
插入时我可以遵循这两种方法:
1.Setting 身份证
$emp = new Employee();
$emp->employee_type_id = $request->type_id;
$emp->name = $request->name;
$emp->save();
2.Setting关系
$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:最简单的方法
- 相反:您必须显式使用外键列名
2。将 associate()
与模型
一起使用
- 优点:关系将自动设置,因此您可以稍后使用该模型而无需先从数据库中获取它
- 亲:外键列的名称无关紧要(只需要在关系声明中定义即可)
- 相反:需要额外的查询才能首先获取相关模型
3。仅使用带有 id
的 associate()
- 亲:外键列的名称无关紧要(只需要在关系声明中定义即可)
- 反对:关联id后不会加载关系。当您访问
$emp->employeeTypes
时,查询将 运行
我个人更喜欢使用 associate()
(基本上所有的关系方法,即使它们并不总是必要的)。如果我已经有了模型,我会通过它,否则我将只使用 id。您已经定义了与外键等的关系,所以您不妨使用它。
我有两个表,employees
和 employee types
。
employees
有以下字段
- id (PK)
- employee_type_id(FK)
- 姓名
和employee_type
有以下字段,
- id (PK)
- 标题
我的eloquent模型函数是,
Employee
class Employee extends Model {
public function employeeTypes() {
return $this->belongsTo('App\Model\EmployeeType');
}
}
EmployeeType
class EmployeeType extends Model {
}
我不确定这是否是保持关系的正确方式。 插入时我可以遵循这两种方法:
1.Setting 身份证
$emp = new Employee();
$emp->employee_type_id = $request->type_id;
$emp->name = $request->name;
$emp->save();
2.Setting关系
$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:最简单的方法
- 相反:您必须显式使用外键列名
2。将 associate()
与模型
一起使用
- 优点:关系将自动设置,因此您可以稍后使用该模型而无需先从数据库中获取它
- 亲:外键列的名称无关紧要(只需要在关系声明中定义即可)
- 相反:需要额外的查询才能首先获取相关模型
3。仅使用带有 id
的associate()
- 亲:外键列的名称无关紧要(只需要在关系声明中定义即可)
- 反对:关联id后不会加载关系。当您访问
$emp->employeeTypes
时,查询将 运行
我个人更喜欢使用 associate()
(基本上所有的关系方法,即使它们并不总是必要的)。如果我已经有了模型,我会通过它,否则我将只使用 id。您已经定义了与外键等的关系,所以您不妨使用它。