Eloquent 批次更新多條記錄(存在時update,不存在時insert)
不是對一條記錄多個欄位批量賦值。
類似批量插入:
DB::table('users')->insert(array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 0), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 0), ...));
有沒有類似的語句:
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' );
實現的功能是:
1.查詢條件存在時,批次更新原資料;
例:email='aaa@example.com'時, 'age'修改為 20,email='bbb@example.com'時, 'age'修改為 25,...
2.查詢條件不存在時,批量插入資料。
例:email='ccc@example.com'時, 'age'修改為 50,...
My 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);}
以上的代碼,在更新資料為千筆以上時,就出現效能問題了!
求教,有沒有更好的解決方案呢?
請多指點。
回複內容:
Eloquent 批次更新多條記錄(存在時update,不存在時insert)
不是對一條記錄多個欄位批量賦值。
類似批量插入:
DB::table('users')->insert(array( array('email' => 'aaa@example.com', 'name' => 'zhangsan', 'age'=> 0), array('email' => 'bbb@example.com', 'name' => 'wangwu', 'age'=> 0), ...));
有沒有類似的語句:
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' );
實現的功能是:
1.查詢條件存在時,批次更新原資料;
例:email='aaa@example.com'時, 'age'修改為 20,email='bbb@example.com'時, 'age'修改為 25,...
2.查詢條件不存在時,批量插入資料。
例:email='ccc@example.com'時, 'age'修改為 50,...
My 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);}
以上的代碼,在更新資料為千筆以上時,就出現效能問題了!
求教,有沒有更好的解決方案呢?
請多指點。
1.將查詢改為DB
操作
2.foreach
裡面不要有查詢操作
3.可以將所有email組裝一條查詢語句查詢,由服務端比對當前哪條記錄存在