Php 在Laravel中保存模型时,直接设置ID和设置有说服力的关联关系之间的区别?
我有两个表,Php 在Laravel中保存模型时,直接设置ID和设置有说服力的关联关系之间的区别?,php,laravel,eloquent,laravel-5,laravel-5.1,Php,Laravel,Eloquent,Laravel 5,Laravel 5.1,我有两个表,员工和员工类型 employees具有以下字段 id(主键) 员工类型id(FK) 名字 并且employee\u type具有以下字段 id(主键) 头衔 我雄辩的模型功能是 员工 class Employee extends Model { public function employeeTypes() { return $this->belongsTo('App\Model\EmployeeType'); } } Emplo
员工
和员工类型
employees
具有以下字段
- id(主键)
- 员工类型id(FK)
- 名字
employee\u type
具有以下字段
- id(主键)
- 头衔
员工
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.手动设置外键
- 赞成者:这是最简单的方法
- 相反:必须显式使用外键列名
associate()
与模型关联
- Pro:关系将自动设置,以便您以后可以使用该模型,而无需首先从数据库中获取该模型
- Pro:外键列的名称无关紧要(它只需要在关系声明中定义)
- Contra:首先需要一个额外的查询来获取相关的模型
associate()
- Pro:外键列的名称无关紧要(它只需要在关系声明中定义)
- 相反:关联id后不会加载关系。当您访问
$emp->employeeTypes
我个人更喜欢使用
associate()
(基本上所有的关系方法,即使它们并不总是必需的)。如果我已经有了模型,我会传递它,否则我只会使用id。您已经定义了与外键等的关系,所以您最好使用它。这取决于上下文,只需保持简单愚蠢/KISS
。感谢您对这些方法进行了非常明确的说明。我想用associate()
和id:)很好的解释!我还将使用associate()
。