当我尝试执行此代码时(摘录):
// ####_##_##_######_create_items_table.php
$table->string('seller_sku')->default('')->unique();
// ItemFactory.php
return [
'seller_sku' => $faker->optional($default = '')->word,
];
并运行:php artisan migrate:refresh --seed
它产生:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column
'seller_sku' cannot be null (SQL: insert into `items` (`name`,
`seller_sku`, `category_id`, `current_prize`, `winter`, `updated_at`,
`created_at`) values (facilis, , 44, 131, 1,
2018-03-03 12:18:22, 2018-03-03 12:18:22))
为什么会发生这种情况?如何解决问题?
答案 0 :(得分:1)
问题是因为首先你要告诉laravel设置一个默认值''
之后你设置了一个unique key
..如果有value = ''
的行,他们将不会是什么独一无二..唯一键不能有任何默认值..这就是你收到错误的原因
答案 1 :(得分:0)
使用$faker->optional(null,'')->word
解决问题。 The faker documentations有点误导,特别是对于有人来自Python。
但无论如何,只是在非空列中不允许重复的空字符串,所以我最终做了这个(摘录):
// ####_##_##_######_create_items_table.php
$table->string('seller_sku')->nullable()->unique();
// ItemFactory.php
return [
'seller_sku' => $faker->unique()->optional()->word,
];
我分享了一个解决方案,即有人可能会陷入混乱。