【问题标题】:Laravel throws an error on setting a not null string field to empty stringLaravel 将非空字符串字段设置为空字符串时抛出错误
【发布时间】:2018-08-11 13:37:19
【问题描述】:

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

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


    【解决方案1】:

    使用$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,
    ];
    

    我分享了一些人可能会遇到同样困惑的解决方案。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不知道空字符串在唯一性方面也很重要,我认为它们在这方面等同于null
      • no unique keys 即使是 null or '' 也不能有相同的值
      • 不可以有多个null。经过测试和认证。
      猜你喜欢
      • 1970-01-01
      • 2017-11-05
      • 2016-01-31
      • 1970-01-01
      • 2021-10-18
      • 2014-11-12
      • 2016-01-24
      • 1970-01-01
      相关资源
      最近更新 更多