Laravel 8 将整数保存到空数据库列中 - 保存与更新
Laravel 8 save integer into null DB column - save vs update
我有一个有趣的问题,Laravel 的 save()
没有替换数据库中的 null
值,而 update()
可以。我还通过手动将 null
更改为 1
进行了测试,然后 save()
开始更新该列。我在整个项目中都在使用 save()
,我希望它保持这种状态,或者至少我在更改代码之前了解问题所在。
迁移(所有代码将是 brewity 的部分摘录):
$table->foreignId('checklist_id')->nullable()->constrained('checklists')->onUpdate('cascade')->onDelete('cascade');
$table->foreignId('action_id')->nullable()->constrained('actions')->onUpdate('cascade')->onDelete('cascade');
模型(添加了checklist_id和action_id用于测试,否则它们不在这里):
// test
protected $fillable = [
'checklist_id',
'action_id',
];
protected $casts = [
'checklist_id' => 'integer',
'action_id' => 'integer',
];
// actual
protected $fillable = [
];
protected $casts = [
];
控制器:
public function update(UpdateWorkOrderRequest $request, WorkOrder $workOrder)
{
$response = $workOrder->save($request->all());
}
表单提交(来自Chrome):
------WebKitFormBoundary73Z4wzsmsGcgOOAM
Content-Disposition: form-data; name="checklist_id"
1
------WebKitFormBoundary73Z4wzsmsGcgOOAM
Content-Disposition: form-data; name="action_id"
1
dd($request->all()):
array:2 [▼
"checklist_id" => "1"
"action_id" => "1"
]
字段 checklist_id
和 action_id
在使用 save()
后为 null
,但使用 update()
确实会更新它们。如果我这样做,它也会起作用:
$workOrder->checklist_id = $request->checklist_id;
$workOrder->action_id = $request->action_id;
$workOrder->save();
我选择 save()
来编写更少的代码而不是上面的示例,因为从文档中我认为我可以在从 $request
分配数据时使用 save()
,如下所示:https://laravel.com/docs/9.x/eloquent#updates
我有一个有趣的问题,Laravel 的 save()
没有替换数据库中的 null
值,而 update()
可以。我还通过手动将 null
更改为 1
进行了测试,然后 save()
开始更新该列。我在整个项目中都在使用 save()
,我希望它保持这种状态,或者至少我在更改代码之前了解问题所在。
迁移(所有代码将是 brewity 的部分摘录):
$table->foreignId('checklist_id')->nullable()->constrained('checklists')->onUpdate('cascade')->onDelete('cascade');
$table->foreignId('action_id')->nullable()->constrained('actions')->onUpdate('cascade')->onDelete('cascade');
模型(添加了checklist_id和action_id用于测试,否则它们不在这里):
// test
protected $fillable = [
'checklist_id',
'action_id',
];
protected $casts = [
'checklist_id' => 'integer',
'action_id' => 'integer',
];
// actual
protected $fillable = [
];
protected $casts = [
];
控制器:
public function update(UpdateWorkOrderRequest $request, WorkOrder $workOrder)
{
$response = $workOrder->save($request->all());
}
表单提交(来自Chrome):
------WebKitFormBoundary73Z4wzsmsGcgOOAM
Content-Disposition: form-data; name="checklist_id"
1
------WebKitFormBoundary73Z4wzsmsGcgOOAM
Content-Disposition: form-data; name="action_id"
1
dd($request->all()):
array:2 [▼
"checklist_id" => "1"
"action_id" => "1"
]
字段 checklist_id
和 action_id
在使用 save()
后为 null
,但使用 update()
确实会更新它们。如果我这样做,它也会起作用:
$workOrder->checklist_id = $request->checklist_id;
$workOrder->action_id = $request->action_id;
$workOrder->save();
我选择 save()
来编写更少的代码而不是上面的示例,因为从文档中我认为我可以在从 $request
分配数据时使用 save()
,如下所示:https://laravel.com/docs/9.x/eloquent#updates