php - Symfony -> 更新时覆盖现有实体
问题描述
我创建了一个简单的用户类
-用户->实体
-地址->实体
创建用户后,我在我的数据库中创建了一个地址记录。
现在,当一个用户被编辑和更改他的地址时:
如果地址存在,他需要使用该现有地址
如果该地址不存在 Symfony 需要创建一个新地址并使用新地址。
Atm 我可以创建用户及其地址,
但是当我编辑用户地址时:
当前现有地址被覆盖而不是创建新地址。
也许我错过了一些逻辑,或者我做错了。
这是我的代码:
public function editAction(Request $request,Users $user)
{
$form = $this->createForm(UserForm::class, $user);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$form = $form->getData();
$this->tryEditAction($user, $form);
return $this->redirectToRoute('admin_userslist');
}
}
$label = "Gebruiker aanpassen";
return $this->render('@ProjectUser/backend/edit.html.twig', array(
'form' => $form->createView(),
'user' => $user,
'label' => $label,
));
}
这是 TryEditAction :
public function tryEditAction($user, $form)
{
$formAddress = $form->getAddress();
$formAddressStreet = $formAddress->getStreet();
$formAddressStreetNr = $formAddress->getStreetNr();
$formAddressStreetBus = $formAddress->getStreetBus();
$entityManager = $this->getDoctrine()->getManager();
//***
// Getting the entitymanager to get all addresses stored in our db
// Check if this address exist, so we change or edit the address accordingly to the user
//**
$address = $entityManager->getRepository('ProjectLocationBundle:Address')
->findOneBy(
array(
'street' => $formAddressStreet,
'street_nr' => $formAddressStreetNr,
'street_bus' => $formAddressStreetBus
)
);
if($address):
$foundAddress = $address;
$user->setAddress($foundAddress);
$foundAddress->setUser($user);
$entityManager->persist($foundAddress);
else:
$newAddress = new Address();
$newAddress = $formAddress;
$entityManager->persist($newAddress);
$entityManager->flush($newAddress);
$user->setAddress($newAddress);
endif;
// dump($user); die;
$userName = $user->getUsername();
$slug = $this->slugify($userName);
$user->setSlug($slug);
$entityManager->persist($user);
$entityManager->flush();
return $user;
}
解决方案
推荐阅读
- mbed - 如何访问 MBED 中的设备特定功能?
- c# - C# - 屏幕截图源过滤器 - 直接显示
- node.js - SAML 注销失败:颁发者不匹配(NodeJS + Okta)
- php - 如何在 shell 中检查正确数量的 STDIN 用户输入?
- knockout.js - 使用 .extend 时如何获取底层的可观察值?
- javascript - 限制用户访问其他用户配置文件
- c# - 无法更改 DataGridView 中复选框的默认值(Windows 窗体应用程序)
- python - 如何停止在scrapy中重复循环?
- nativescript - 如何在预览模式下在 NativeScript 中构建 npm 依赖项?
- unix - Solaris 10 登录 - 接受多个密码