Laravel批量插入并忽略不在表中的属性

时间:2018-01-10 23:22:09

标签: php laravel insert eloquent

我正在从API响应中检索数据,然后将其保存到数据库中。 API响应中有一些字段在插入数据库时​​我想忽略,因为表中不存在这些字段。我了解到它的工作原理是在模型上为$ fillable分配必要的字段,这会自动忽略字段,但它只适用于只插入一行的to,但我想执行批量操作插入多行。 Model::create($singleRowWithAttributesNotInTable)执行批量插入,但忽略$ fillable变量并返回Model::insert($multipleRowsWithAttributesNotInTable)错误。

有没有办法做到这一点,还是我必须遍历API数据并在循环中添加Column not found?谢谢!

1 个答案:

答案 0 :(得分:0)

根据这些主题:

Laravel 5.2 Model $fillable gets ignored?

Laravel 4 mass assignment guarded not work

[Request] Allow Eloquent to save multiple records at once #1295

查询生成器的方法insert存在于Illuminate\Database\Query\Builder类中而不是Illuminate/Database/Eloquent/Model.php中。这意味着您没有使用Eloquent模型。

这就是为什么$fillable属性没有被触发的原因。如果您的数组中有任何其他数据,如(_token_submit等,则会导致您的错误。

您可以在使用getFillable方法调用insert方法之前过滤数组来制定变通解决方案,以确保插入的数组没有任何其他值。

注意: 如果您的表中有created_atupdated_at个字段,并且您使用的是insert方法,则必须将它们添加到数组中。