Symfony 4 - 避免更新数据库上没有给定的字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony 4 - 避免更新数据库上没有给定的字段相关的知识,希望对你有一定的参考价值。

我已经构建了一个rest-api应用程序但是如果我想更新一个实体,symfony会改变整行。因此,GET-Request中未给出的字段也会更改并设置为NULL。

我只想更新GET-Request中包含的字段。

public function update(int $id, Request $request, UserPasswordEncoderInterface $passwordEncoder) {
  $account = $this->repository->find($id);

  if ($account == null) {
    throw new HttpException(Response::HTTP_NOT_FOUND);
  }

  $form = $this->createForm(UserType::class, $account);
  $form->submit($request->request->all());

  if ($form->isSubmitted() && $form->isValid()):
    $account->setPassword(
      $passwordEncoder->encodePassword(
        $account,
        $form->get('password')->getData()
      )
    );
    $em = $this->getDoctrine()->getManager();
    try {
      $em->flush();
    } catch (Exception $e) {
      throw new HttpException(Response::HTTP_BAD_REQUEST, $e->getMessage());
    }

    return $this->view(null, Response::HTTP_NO_CONTENT);
  else:
    return $this->view($form, Response::HTTP_BAD_REQUEST);
  endif;
 }
答案

你必须将false作为第二个参数传递给$form->submit();这会禁用表单系统清除未提交值的默认行为。

https://symfony.com/doc/current/form/direct_submit.html#calling-form-submit-manually

以上是关于Symfony 4 - 避免更新数据库上没有给定的字段的主要内容,如果未能解决你的问题,请参考以下文章

如何防止不需要的学说在symfony 4中持续存在?

Symfony 4 项目:我应该多久更新一次开源网站的依赖项?

无法使用 sonataClassificationBundle 更新数据库 symfony 4

symfony 4在表单上没有handleResquest方法但使用xhr对象html上传

Symfony 4.3 学说迁移问题

如何在Symfony3.4中使用Lock Component和username