Php 在DB中插入条令/Symfony 4中建立的关联
Symfony 4中的我的用户类:Php 在DB中插入条令/Symfony 4中建立的关联,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,Symfony 4中的我的用户类: namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Security\Core\User\UserInterface; /** * @ORM\Entity(repositoryClass="App\Reposit
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields={"email"}, message="There is already an account with this email")
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
// ... rest of the User Entity
}
我创建了另一个名为“创建者”的实体,如下所示:
两者之间的关联是当用户注册为“创建者”(不只是注册为“普通用户”)时,插入将创建者与用户关联
在数据库中插入如下内容:
$user = new User();
$creator = new Creator();
$form = $this->createForm(CreatorRegistrationForm::class, [$user, $creator]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user
->setEmail($form->get('email')->getData())
->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('password')->getData()
)
)
->setFirstName($form->get('firstname')->getData())
->setLastName($form->get('lastname')->getData())
->setBirthday($form->get('birthday')->getData());
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush(); //This insert is successful :)
$userID = $user->getId();
$creator->createCreator($userID);
$entityManager->persist($creator);
$entityManager->flush();
// This does nothing.
// Can you only persist/flush once? If so, what is the right syntax?
return $guardHandler->authenticateUserAndHandleSuccess(
$user,
$request,
$authenticator,
'main' // firewall name in security.yaml
);
}
这是通过条令在DB中创建关联的正确方法吗?仍在努力理解协会是如何运作的。您是否必须明确说明与上述内容类似的关联?这将返回一个错误警告:从空值创建默认对象,并指出:
public function createCreator($userid)
{
$this->user->id = $userid; //this here is what the error points to.
return $this;
}
做这件事的正确方法是什么?原则要求Creator->user
成为user
类的对象
因此,您可能需要一个Creator::setUser(User)
方法,并执行如下操作:
//...
$entityManager->persist($user);
$creator->setUser($user);
$entityManager->persist($creator);
$entityManaer->flush();
不,这不是与教义产生有意义关系的正确方式。冒着不友善的风险,你甚至都不亲近。我所能做的就是建议你一步一步地完成这部片子。但是你可能想从如何使用实体表单开始,因为你问题中的许多代码要么是错误的,要么是不必要的。我的意思是,你仍然可以很友善,但也很有帮助。我看了这份文件,但忘了。我会再看一遍。我会从你的问题中删除大部分与表单处理相关的代码。您的问题要么是关于表单处理和表单组件,要么是关于ORM。看起来是关于后者的,所以我的答案是。如何通过条令使数据持久化并不真正相关,清理这些数据将导致更高质量的问题。
//...
$entityManager->persist($user);
$creator->setUser($user);
$entityManager->persist($creator);
$entityManaer->flush();