【laravel】数据填充:报错,不保存时间戳

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Support\Facades\DB;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

        $users = User::factory()->times(50)->make();

        $res = User::insert($users->makeVisible(['password', 'remember_token'])->toArray());

        $user = User::find(1);
        $user->name = 'Summer';
        $user->email = 'summer@example.com';
        $user->is_admin = true;
        $user->save();
    }
}

报错

Invalid datetime format: 1292 Incorrect datetime value: '2021-04-04T14:31:07.000000Z' for column 'created_at' at

原因: 新版本的laravel调用toArray方法会使用新的时间戳格式,导致错误

解决: 在模型文件里加入一个方法,转一下时间格式

protected function serializeDate(\DateTimeInterface $date) {
	return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
}

不保存时间

$users = User::factory()->times(50)->make(); 调用 make 方法是不会保存时间的,可以 var_dump 打印一下原SQL语句看下。

解决:

$users = User::factory()->times(50)->make([
    User::CREATED_AT => now(),
    User::UPDATED_AT => now()
]);

make 方法可以传入一个数组去覆盖工厂类里面定义的数据,通过覆盖的方式手动插入时间

上一篇:源码解析-SpringIOC容器初始化,Bean实例化过程


下一篇:Azure 解决方案:Azcopy和CRON使用场景