Laravel在将非空字符串字段设置为空字符串时抛出错误

问题描述 投票:1回答:2

当我尝试执行此代码时(摘录):

// ####_##_##_######_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))

为什么会发生这种情况?如何解决问题?

laravel laravel-5 factory laravel-5.5 faker
2个回答
1
投票

问题是因为首先你告诉laravel设置一个默认值''之后你设置一个unique key ..如果有value = ''的行他们将不再是唯一的...独特的键不能有任何默认值..这就是为什么你收到了一个错误


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,
];

我分享了一个解决方案,有人可能会陷入混乱。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.