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.手动设置外键
  • 赞成者:这是最简单的方法
  • 相反:必须显式使用外键列名
2.使用
associate()
与模型关联
  • Pro:关系将自动设置,以便您以后可以使用该模型,而无需首先从数据库中获取该模型
  • Pro:外键列的名称无关紧要(它只需要在关系声明中定义)
  • Contra:首先需要一个额外的查询来获取相关的模型
3.使用仅与id关联的
associate()
  • Pro:外键列的名称无关紧要(它只需要在关系声明中定义)
  • 相反:关联id后不会加载关系。当您访问
    $emp->employeeTypes


我个人更喜欢使用
associate()
(基本上所有的关系方法,即使它们并不总是必需的)。如果我已经有了模型,我会传递它,否则我只会使用id。您已经定义了与外键等的关系,所以您最好使用它。

这取决于上下文,只需
保持简单愚蠢/KISS
。感谢您对这些方法进行了非常明确的说明。我想用
associate()
和id:)很好的解释!我还将使用
associate()