Eloquent aktualisiert mehrere Datensätze stapelweise (aktualisieren Sie, wenn sie vorhanden sind, fügen Sie ein, wenn sie nicht vorhanden sind)
Es handelt sich nicht um eine Stapelzuweisung mehrerer Felder in einem Datensatz.
Ähnlich wie Batch-Einfügung:
<code>DB::table('users')->insert(array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 0), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 0), ... )); </code>
Gibt es eine ähnliche Aussage:
<code>DB::table('users')->update( array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 20), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 25), array('email' => 'ccc@example.com', 'name' => 'chenliu', 'age'=> 50), ... ) , 'email' ); </code>
Die implementierten Funktionen sind:
1. Wenn die Abfragebedingungen vorliegen, aktualisieren Sie die Originaldaten stapelweise
<code>例: email='aaa@example.com'时, 'age'修改为 20, email='bbb@example.com'时, 'age'修改为 25, ... </code>
<code>例: email='ccc@example.com'时, 'age'修改为 50, ... </code>
<code>public function updateOrCreate (Request $request) { $insert_array = []; $datas = $request->all(); foreach ($datas as $key=> $data) { $user = User::where('email', $data['email'])->first(); if (!$user) { $insert_array[] = $data; // 更新原数据 } else { $user->email = $data['email']; $user->age = $data['age']; $user->save(); } } // 批量插入数据 User::insert($insert_array); } </code>
Bitte sagen Sie mir, gibt es eine bessere Lösung?
Bitte geben Sie mir weitere Ratschläge.
Antwortinhalt:
Es handelt sich nicht um eine Stapelzuweisung mehrerer Felder in einem Datensatz.
Ähnlich wie bei der Stapeleinfügung:
<code>DB::table('users')->insert(array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 0), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 0), ... )); </code>
<code>DB::table('users')->update( array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 20), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 25), array('email' => 'ccc@example.com', 'name' => 'chenliu', 'age'=> 50), ... ) , 'email' ); </code>
1. Wenn die Abfragebedingungen vorliegen, aktualisieren Sie die Originaldaten stapelweise
2. Wenn die Abfragebedingungen nicht vorliegen, fügen Sie Daten stapelweise ein.
<code>例: email='aaa@example.com'时, 'age'修改为 20, email='bbb@example.com'时, 'age'修改为 25, ... </code>
Mein Code ist:
<code>例: email='ccc@example.com'时, 'age'修改为 50, ... </code>
Der obige Code führt zu Leistungsproblemen, wenn die aktualisierten Daten mehr als tausend umfassen!
<code>public function updateOrCreate (Request $request) { $insert_array = []; $datas = $request->all(); foreach ($datas as $key=> $data) { $user = User::where('email', $data['email'])->first(); if (!$user) { $insert_array[] = $data; // 更新原数据 } else { $user->email = $data['email']; $user->age = $data['age']; $user->save(); } } // 批量插入数据 User::insert($insert_array); } </code>
Bitte sagen Sie mir, gibt es eine bessere Lösung?
Bitte geben Sie mir weitere Ratschläge.
1. Ändern Sie die Abfrage in
-Operation
2. Keine Abfrageoperation in DB
3. Alle E-Mails können in einer Abfrageanweisung zusammengefasst werden, und der Server vergleicht den aktuellen Datensatz Existenzforeach