Laravel Bulk UPDATE

Rob*_*Rob 6 laravel eloquent laravel-4 laravel-5

我正在尝试使用随机slugs为每条记录更新一个包含slug值的表.

$vouchers = Voucher->get(); // assume 10K for example

foreach ($vouchers as $voucher) {
    $q .= "UPDATE vouchers set slug = '" . Str::random(32) . "' WHERE id = " . $voucher->id . ";";
}

DB::statement($q);
Run Code Online (Sandbox Code Playgroud)

大约有200万条记录,因此我需要将其作为批量执行.单独记录这样做太长了.我似乎无法找到批量运行它们的方法,比如以10K或者其他类似的组.

尝试了一堆的变化->update()DB::statement,但似乎无法得到它去.

din*_*uti 5

如果有人像我一样登陆此页面,laravel 允许批量更新:

$affectedRows = Voucher::where('id', '=', $voucher->id)->update(array('slug' => Str::random(32)));

请参阅http://laravel.com/docs/4.2/eloquent#insert-update-delete下的“更新检索到的模型”

  • 这仍然需要用户进行 200 万次 DB 调用,而不是批量更新。 (4认同)

Ana*_*nam -1

对结果进行分块是执行此类操作的最佳方式,而无需消耗所有 RAM,并且 Laravel 支持开箱即用的分块结果。

例如:

  优惠券::块(2000, 函数($优惠券)
  {
    foreach($优惠券作为$优惠券)
    {
        //
    }
 });