如何使用Laravel中的firstOrCreate将Array插入数据库?

时间:2017-08-06 19:06:16

标签: php arrays laravel foreach eloquent

我有一个这样的数组,里面有120个元素

`array (size=120)
  0 => 
    array (size=8)
      'name' => That the quick brown fox jumps over the lazy - 7' (length=53)
      'url' => string 'google.com/zyx' (length=134)
      'category' => string 'search-engine' (length=6)
  1 => 
    array (size=8)
      'name' => string 'Mr. john brandy gave me a wall nut of quite' (length=67)
      'url' => string 'yahoo.com/dzxser' (length=166)
      'category' => string 'indian' (length=6)`

我想将它们插入到我创建的模型的书签表中,我想确保重复不会发生。我发现了这种https://laravel.com/docs/5.4/eloquent#other-creation-methods特殊firstOrCreate方法。

我认为我必须使用foreach,但我不确定如何。任何人都可以帮我解决一些问题。

2 个答案:

答案 0 :(得分:0)

如果您不希望在插入记录数组时发生重复,那么您只需要设置一个约束,确保字段是唯一的。

如果您使用迁移创建数据库架构,则可以使用以下内容:$table->string('name')->unique();

现在举例来说,这将确保' name'列数据是

答案 1 :(得分:0)

实际上你不需要firstOrCreate,你需要updateOrCreate。检查Laravel Other Creation methods您将找到该方法。

enter image description here

假设该数组位于$alldata

foreach($alldata as $data) {
    MyModel::updateOrCreate($data); //the fields must be fillable in the model
}

这将在循环循环时运行更新/或创建120个查询。优点是,你不能有重复,而是如果有重复,它只会执行对表的更新。

但是,确保数据无论以何种方式出现重复的最佳方法是在创建数据库表时进行设置。如果是这种情况,您可以在许多字段上设置唯一约束。