Laravel保存模型时直接设置ID和设置eloquent关联关系有什么区别?

Difference between setting ID directly and setting eloquent associate relation when saving a model in Laravel?

我有两个表,employeesemployee types

employees 有以下字段

employee_type有以下字​​段,

我的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。您已经定义了与外键等的关系,所以您不妨使用它。