Eloquent 批次更新多條記錄(存在時update,不存在時insert)

來源:互聯網
上載者:User
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組裝一條查詢語句查詢,由服務端比對當前哪條記錄存在

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.