【问题标题】:Laravel Seeder - how to seed null values on unique columnLaravel Seeder - 如何在唯一列上播种空值
【发布时间】:2019-03-22 22:19:31
【问题描述】:

我有简单的用户模型:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('email')->unique();
    $table->string('password');
    ...
}

我想制作一个不会填充用户稍后可以填充的电子邮件地址的播种器:

for($i = 0; $i < 11; $i++){
    $user = new User();
    $user->save();
}

但是我有一个明显的错误:

SQLSTATE[HY000]:一般错误:1364 字段“电子邮件”没有默认值

我尝试为我的播种机使用用户模型修改器:

用户模型

public function setEmailAttribute($value) {
    if ( empty($value) ) { // will check for empty string
        $this->attributes['email'] = NULL;
    } else {
        $this->attributes['email'] = $value;
    }
}

用户播种器

for($i = 0; $i < 11; $i++){
    $user = new User();
    $user->setEmailAttribute('');
    $user->app_role = "user";
    $user->save();
}

但这对我不起作用,我又遇到了一个错误:

SQLSTATE[23000]:违反完整性约束:1048 列“电子邮件”不能为空

但是,我不想将email 列永久设置为uniquenullable,因为我只想对我的播种机进行测试。

有人知道如何在这里找到解决方案吗?

【问题讨论】:

  • 您应该将列设置为nullable
  • 你为什么不用虚拟电子邮件(也许你可以使用faker)填充电子邮件列并要求用户稍后替换它?并且您可以添加一个额外的列来检查此电子邮件是假的还是用户填写的(换句话说,一个标志)。
  • @JunaidAhmad 确定可以,但我不确定这是否对我来说是最好的解决方案,如果没有其他方法可以尝试这个解决方案,谢谢!

标签: laravel


【解决方案1】:

nullable() 添加到迁移中的email

    $table->string('email')->unique()->nullable()

然后在命令行中运行以下命令,

1.composer dump-autoload // 更新迁移中的更改

2.php artisan migrate:fresh --seed //新的迁移并为您的播种机播种

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 2017-08-29
    • 2021-06-11
    • 1970-01-01
    • 2016-01-30
    • 2023-02-14
    • 2016-05-06
    • 2019-09-21
    • 2020-08-01
    相关资源
    最近更新 更多