2017-08-06 14 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スキーマを作成するために、移行を使用している場合は、このようなものを使用することができます:今例えば、これは「名前」列のデータが

+0

私は制約を設定したくありません。私はfirstorCreateメソッドを使いたいです。 – coolsaint

0

であることを確認します実際にはそうでない$table->string('name')->unique();

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個のクエリの作成されます。利点は、反復がある場合は、重複を持つことができないことです。その反復のみがテーブルの更新を実行することになります。

ただし、データがどのような形で重複していないかを確認する最良の方法は、データベーステーブルを作成するときに設定することです。あなたのケースであれば、多くのフィールドに一意の制約を設定できます。

関連する問題