php – 在Laravel中保存模型时,直接设置ID和设置雄辩的关联关系之间的区别?

我有两个表,员工和员工类型.

员工有以下几个领域

> id(PK)
> employee_type_id(FK)
>名字

和employee_type有以下字段,

> id(PK)
>标题

我雄辩的模型功能是,

雇员

  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.您已经定义了与外键等的关系,因此您也可以使用它.

转载注明原文:php – 在Laravel中保存模型时,直接设置ID和设置雄辩的关联关系之间的区别? - 代码日志