【发布时间】:2018-07-22 07:56:30
【问题描述】:
我试图通过Point::create($value) 和new Point($value) 在 laravel 5 中设置新行的值 id,$value 包含一个 id 值,而这个 id 在 mysql db 中不存在。
每次我尝试新行时都有一个自动 ID,而不是 $value
【问题讨论】:
-
告诉我们
dd($value)
我试图通过Point::create($value) 和new Point($value) 在 laravel 5 中设置新行的值 id,$value 包含一个 id 值,而这个 id 在 mysql db 中不存在。
每次我尝试新行时都有一个自动 ID,而不是 $value
【问题讨论】:
dd($value)
在Point 模型类的fillable 数组中添加id。
protected $fillable = [
'id'
];
【讨论】:
您需要设置自定义主键:
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属性设置为字符串。
【讨论】:
检查create上的Laravel documentation:
您需要将一个键值对、一个数组传递给create 方法。并在此处指定id 值,例如:
Point::create([
'id' => 5,
'x' => 10,
'y' => 20,
])
【讨论】:
如果您不想让 id 可填充,则可以使用 next 代替 Point::create($value):
$point = Point::make($value);
$point->id = $value['id'];
$point->save();
您也可以Point::unguard() 暂时忽略字段的可填写状态,使id 暂时可填写。
【讨论】: