使用Laravel Tinker和Carbon批量更新数据

问题描述

由于无法迭代值,因此无法通过修补匠和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')]);

代码中的这一行会更新表中的每一行,因此对于每个循环的最后一轮 此代码将每一行更新到最后一个生日。

由于它是一个字符串列,因此您可以按以下方式重新设置其格式:

 $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

中可能有很多格式

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...