【发布时间】: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 列永久设置为unique 和nullable,因为我只想对我的播种机进行测试。
有人知道如何在这里找到解决方案吗?
【问题讨论】:
-
您应该将列设置为
nullable -
你为什么不用虚拟电子邮件(也许你可以使用faker)填充电子邮件列并要求用户稍后替换它?并且您可以添加一个额外的列来检查此电子邮件是假的还是用户填写的(换句话说,一个标志)。
-
@JunaidAhmad 确定可以,但我不确定这是否对我来说是最好的解决方案,如果没有其他方法可以尝试这个解决方案,谢谢!
标签: laravel