Eloquent aktualisiert mehrere Datensätze stapelweise (aktualisieren Sie, wenn sie vorhanden sind, und fügen Sie ein, wenn sie nicht vorhanden sind).

WBOY
Freigeben: 2016-09-23 11:31:01
Original
1876 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
2. Wenn die Abfragebedingungen nicht vorliegen, fügen Sie Daten stapelweise ein.

<code>例:
email='ccc@example.com'时, 'age'修改为 50,
...
</code>
Nach dem Login kopieren
Nach dem Login kopieren
Mein Code ist:

<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>
Nach dem Login kopieren
Nach dem Login kopieren
Der obige Code führt zu Leistungsproblemen, wenn die aktualisierten Daten mehr als tausend umfassen!

Bitte sagen Sie mir, gibt es eine bessere Lösung?

Bitte geben Sie mir weitere Ratschläge.

Antwortinhalt:

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 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>
Nach dem Login kopieren
Nach dem Login kopieren
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>
Nach dem Login kopieren
Nach dem Login kopieren
Die implementierten Funktionen sind:

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>
Nach dem Login kopieren
Nach dem Login kopieren

Mein Code ist:
<code>例:
email='ccc@example.com'时, 'age'修改为 50,
...
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage