我正在从API响应中检索数据,然后将其保存到数据库中。 API响应中有一些字段在插入数据库时我想忽略,因为表中不存在这些字段。我了解到它的工作原理是在模型上为$ fillable分配必要的字段,这会自动忽略字段,但它只适用于只插入一行的to
,但我想执行批量操作插入多行。 Model::create($singleRowWithAttributesNotInTable)
执行批量插入,但忽略$ fillable变量并返回Model::insert($multipleRowsWithAttributesNotInTable)
错误。
有没有办法做到这一点,还是我必须遍历API数据并在循环中添加Column not found
?谢谢!
答案 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_at
,updated_at
个字段,并且您使用的是insert
方法,则必须将它们添加到数组中。