【问题标题】:set id value in AUTO_INCREMENT field with laravel使用 laravel 在 AUTO_INCREMENT 字段中设置 id 值
【发布时间】:2018-07-22 07:56:30
【问题描述】:

我试图通过Point::create($value)new Point($value) 在 laravel 5 中设置新行的值 id,$value 包含一个 id 值,而这个 id 在 mysql db 中不存在。 每次我尝试新行时都有一个自动 ID,而不是 $value

【问题讨论】:

  • 告诉我们dd($value)

标签: mysql laravel


【解决方案1】:

Point 模型类的fillable 数组中添加id

protected $fillable = [
    'id'
];

【讨论】:

    【解决方案2】:

    您需要设置自定义主键:

    protected $primaryKey = 'custom_key';
    

    如果你没有PK,这样做:

    protected $primaryKey = null;
    public $incrementing = false;
    

    另外,将其从 fillable() 数组中删除。在这种情况下,id 将被忽略。

    来自the docs

    Eloquent 还会假设每个表都有一个名为 id 的主键列。您可以定义一个受保护的$primaryKey 属性来覆盖此约定。

    此外,Eloquent 假设主键是一个递增的整数值,这意味着默认情况下主键会自动转换为int。如果您希望使用非递增或非数字主键,您必须将模型上的 public $incrementing property 设置为 false。如果您的主键不是整数,则应将模型上受保护的$keyType 属性设置为字符串。

    【讨论】:

      【解决方案3】:

      检查create上的Laravel documentation

      您需要将一个键值对、一个数组传递给create 方法。并在此处指定id 值,例如:

      Point::create([
          'id' => 5,
          'x'  => 10,
          'y'  => 20,
      ])
      

      【讨论】:

        【解决方案4】:

        如果您不想让 id 可填充,则可以使用 next 代替 Point::create($value)

        $point = Point::make($value);
        $point->id = $value['id'];
        $point->save();
        

        您也可以Point::unguard() 暂时忽略字段的可填写状态,使id 暂时可填写。

        【讨论】:

          猜你喜欢
          • 2015-01-15
          • 2014-05-29
          • 1970-01-01
          • 2011-04-04
          • 2011-06-08
          • 2020-03-08
          • 1970-01-01
          • 2020-07-30
          • 1970-01-01
          相关资源
          最近更新 更多