You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel API开发遇SQLSTATE[22007]错误:布尔字段值类型不匹配

问题排查与解决:SQLSTATE[22007] 字段值类型不匹配错误

错误原因

你的错误本质是布尔字段的赋值类型不匹配:

  • 迁移文件中products表的show字段定义为boolean类型,在MySQL中该类型底层存储为tinyint(1),仅接受0/1或原生布尔值true/false。
  • 工厂代码中通过$this->faker->randomElement(['true', 'false'])生成的是字符串类型的'true'/'false',MySQL无法将字符串直接转换为合法的整数值,因此抛出1366 Incorrect integer value错误。

解决方案

方案1:直接生成布尔值(推荐)

修改工厂中的show字段生成逻辑,使用Faker内置的boolean()方法直接返回布尔值:

public function definition()
{
    $show = $this->faker->boolean(); // 直接生成true/false布尔值
    $size_type = $this->faker->randomElement(['ml', 'liter', 'gm', 'kg', 'oz', 'lb']);
    $status = $this->faker->randomElement(['Y', 'N']);
    $price = $this->faker->numberBetween($min = 10, $max = 9999);

    return [
        'catalog_id' => Catalog::factory(),
        'image' => $this->faker->imageUrl($width = 640, $height = 480, 'clothes'),
        'name' => 'iPhone 14 Pro Max',
        'size' => $this->faker->numberBetween($min = 10, $max = 5000),
        'size_type' => $size_type,
        'price' => $price,
        'discounted_price' => $status == 'Y' ? $this->faker->numberBetween($min = $price * 0.6, $max = $price * 0.9) : null,
        'show' => $show,
    ];
}

方案2:字符串转布尔值(兼容原有逻辑)

如果需要保留原有字符串数组的逻辑,在返回数组时将字符串转换为布尔值:

public function definition()
{
    $show = $this->faker->randomElement(['true', 'false']);
    // ... 其他代码不变
    
    return [
        // ... 其他字段不变
        'show' => $show === 'true', // 将字符串转为布尔值
    ];
}

额外优化建议

迁移文件中catalog_id定义为string类型,但工厂中使用Catalog::factory()关联模型,若Catalog的主键是自增整数,建议将迁移中的catalog_id改为外键类型以保持类型一致:

// 替换原有的$table->string('catalog_id');
$table->foreignId('catalog_id')->constrained();

内容的提问来源于stack exchange,提问作者I. Antonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:01:12