2017-08-06 121 views
0

我有一个这样的阵列,它有它如何在Laravel中使用firstOrCreate将数组插入数据库?

`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)` 

我想将它们插入到我已经创建了模型,我的书签表120元,我要确保复制不会发生。我发现这个https://laravel.com/docs/5.4/eloquent#other-creation-methods特别是firstOrCreate方法。

我假设我必须使用foreach,但我不知道如何。任何人都可以帮助我解决一些问题。

+0

在这里没有任何副本 –

+0

@AbdullaNilam我知道,但它是一个只有2个元素的例子。我告诉它总共包含120个元素,或者可能包含更多元素。 – coolsaint

+0

检查这个http://laravel-tricks.com/tricks/using-eloquentfirstorcreate-to-prevent-duplicate-seeding和这个https://laracasts.com/discuss/channels/laravel/first-or-create-result –

回答

0

如果你不想在插入数组记录时发生重复,那么你所要做的就是设置一个约束,确保字段是唯一的。

如果您使用迁移创建DATABSE模式,你可以使用这样的事情:$table->string('name')->unique();

现在为例,这将确保“名称”一栏的数据是

+0

我不想设置约束。我想使用firstorCreate方法。 – coolsaint

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次的查询而创建通过环路循环。好处是,你不能有重复,而如果有重复,它只能执行对表的更新。

但是,确保数据以任何方式不重复的最佳方法是在创建数据库表时进行设置。你可以在许多领域设置独特的限制,如果这是你的情况。