使用 laravel tinker 和 Carbon 批量更新数据

Using laravel tinker and Carbon to mass update data

我在使用 tinker 和 Carbon 批量更新数据时遇到问题,因为它不会遍历值

输入

>>> $d = Child::get('Birthday') //1st command

[!] Aliasing 'Child' to 'App\Child' for this Tinker session.
=> Illuminate\Database\Eloquent\Collection {#4195
     all: [
       App\Child {#4196
         Birthday: "2015-03-26",
       },
       App\Child {#4197
         Birthday: "2014-08-16",
       },
       App\Child {#4198
         Birthday: "2018-02-05",
       },
       App\Child {#4199
         Birthday: "1976-08-26",
       },
       App\Child {#4200
         Birthday: "1978-02-20",
       },
       App\Child {#4201
         Birthday: "2011-06-09",
       },
     ],
   }

>>> foreach($d as $ad) Child::query()->update(['Birthday' => Carbon\Carbon::parse($ad->Birthday)->format('Y:m:d')]) //2nd command

结果如下

Illuminate\Database\Eloquent\Collection {#4204
     all: [
       App\Child {#4205
         Birthday: "2011:06:09",
       },
       App\Child {#4206
         Birthday: "2011:06:09",
       },
       App\Child {#4207
         Birthday: "2011:06:09",
       },
       App\Child {#4208
         Birthday: "2011:06:09",
       },
       App\Child {#4209
         Birthday: "2011:06:09",
       },
       App\Child {#4210
         Birthday: "2011:06:09",
       },
     ],
   }

我只想批量更新日期格式,但如您所见,它更新了所有错误

Child::query()->update(['Birthday' => Carbon\Carbon::parse($ad->Birthday)->format('Y:m:d')]);

你代码中的这一行更新 table 中的每一行,所以在最后一轮 for each 循环中 此代码将每一行更新为最后一个生日。

因为它是一个字符串列,您可以像这样重新格式化它:

 $d = Child::get(['id','Birthday']);
foreach($d as $ad)
 Child::query()->where('id',$ad->id)->update(['Birthday' => Carbon\Carbon::parse($ad->Birthday)->format('Y:m:d')]);

here

中有很多您可能会喜欢的格式

但我必须说这一列应该是日期列,而不是字符串