我在不同的站点上有多种表格。它们都以相同的路线结束。 用户可以将某些类型的模型设置为null。 并非每个表单都提交模型的所有字段。例如:
模型具有以下字段:Name, Adress, Phone, Text
表格1提交了Name, Adress, Phone
表格2提交了Adress, Text
如果我提交表格1,我的模型将如下所示:
$model->name = Name;
$model->adress = Adress;
$model->phone = Phone;
$model->text = null;
但是我不想覆盖Text。我希望Text是提交之前的值。但是,如果我提交表格2,我想更改文本,甚至将其设置为null。
但是,如何检查表单名称是否在提交的表单中(即使实际上是null
)?
目前,这是我在控制器中的更新例程:
...
$this->artSkill = ($request->artSkill) ? $request->artSkill : null;
$this->craftsmanSkill = ($request->craftsmanSkill) ? $request->craftsmanSkill : null;
$this->ownInitiativeSkill = ($request->ownInitiativeSkill) ? $request->ownInitiativeSkill : null;
...
答案 0 :(得分:0)
您可以使用模型的update()
方法,仅传递不为空的值:
https://laravel.com/docs/5.7/eloquent#updates
例如
$input = $request->all();
$input = array_filter($input);
$model->update($input);
答案 1 :(得分:0)
您可以选择以下逻辑:
$model->text = $request->filled('text') ? $request->get('text', $model->text) : null;
如果请求中不存在text
,则其值为空。
如果text
存在且其值为空白,则将其保留为原始值。