Eloquent는 여러 레코드를 일괄 업데이트합니다(존재하는 경우 업데이트, 존재하지 않는 경우 삽입)
하나의 레코드에 여러 필드를 일괄 할당하는 것이 아닙니다.
일괄 삽입과 유사:
<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. 쿼리 조건이 존재하면 원본 데이터를 일괄 업데이트합니다.
<code>例: email='aaa@example.com'时, 'age'修改为 20, email='bbb@example.com'时, 'age'修改为 25, ... </code>
2. 쿼리 조건이 존재하지 않는 경우 일괄적으로 데이터를 삽입합니다.
<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>
위 코드는 업데이트된 데이터가 1,000개가 넘을 때 성능 문제를 일으킬 수 있습니다!
더 나은 해결책이 있는지 알려주세요.
더 많은 조언 부탁드립니다.
Eloquent는 여러 레코드를 일괄 업데이트합니다(존재하는 경우 업데이트, 존재하지 않는 경우 삽입)
하나의 레코드에 여러 필드를 일괄 할당하는 것이 아닙니다.
일괄 삽입과 유사:
<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. 쿼리 조건이 존재하면 원본 데이터를 일괄 업데이트합니다.
<code>例: email='aaa@example.com'时, 'age'修改为 20, email='bbb@example.com'时, 'age'修改为 25, ... </code>
2. 쿼리 조건이 없을 경우 일괄적으로 데이터를 삽입합니다.
<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>
위 코드는 업데이트된 데이터가 1,000개가 넘을 때 성능 문제를 일으킬 수 있습니다!
더 나은 해결책이 있는지 알려주세요.
더 많은 조언 부탁드립니다.
1. 쿼리를 DB
작업
으로 변경합니다. 2. foreach
에 쿼리 작업이 없습니다.
3. 모든 이메일을 하나의 쿼리 문으로 정리할 수 있으며 서버는 현재 레코드를 비교합니다. 존재