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 项目:我应该多久更新一次开源网站的依赖项?
无法使用 sonataClassificationBundle 更新数据库 symfony 4