空值时更新值

时间:2019-04-19 11:12:12

标签: php laravel

我有一个表单,该表单以这种方式将值发送到控制器:

public function postFormUpdate(ProjectUpdateRequest $request)
{
    $inputs = $request->all();
    $project = $this->projectRepository->update($inputs['project_id'],$inputs);
    //...
}

项目存储库是通过以下方式完成的:

public function update($id, Array $inputs)
    {
        return $this->save($this->getById($id), $inputs);
    }

    private function save(Project $project, Array $inputs)
    { 
    // Nullable
    if (isset($inputs['project_type'])) {$project->project_type = $inputs['project_type'];}
    if (isset($inputs['activity_type'])) {$project->activity_type = $inputs['activity_type'];}
...
}

我的问题是,如果form_field中的project_type为null(不需要输入项目类型或可以将其删除),则isset($ inputs ['project_type'])将为false,更新将为不会被触发。

我想要的是,如果用户已经设置了项目类型,然后想要更改它并将其设置为null,这样,它将无法正常工作。我使用isset的原因是,有时我仅更新一个字段,并且我不希望此字段产生错误,因为它不是输入的一部分并且未设置。

我能做的是使用:

if (isset($inputs['project_type']) || is_null($inputs['project_type'])) {$project->project_type = $inputs['project_type'];}

但是我正在寻找是否有一种更优雅的方式来做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:0)

一种更优雅的方法是查看是否在键下设置了任何内容。 因此,请使用array_key_exists

if ( array_key_exists('project_type', $inputs) ){$project->project_type = $inputs['project_type'];}

您可以see it in action here