将对象保存在与另一个相关的表中

时间:2013-01-02 23:38:36

标签: symfony doctrine

当单元格与另一个表相关时,如何创建新对象?在我的情况下,存在一个状态表,如id = 1,state = active; id = 2,state = inactive。

我的实体/ States.php

class States
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $id;
....

实体/ user.php的

 ....
 /**
 * Set state
 *
 * @param \Frontend\AccountBundle\Entity\States $state
 * @return User
 */
public function setState(\Frontend\AccountBundle\Entity\States $state = null)
{
    $this->state = $state;

    return $this;
}

我的AccountController:

....
$user = new User();
$em = $this->get('doctrine')->getEntityManager();
$state = $this->getDoctrine()->getRepository('FrontendAccountBundle:States')->find(1);

$user->setEmail($formData->getEmail());
$user->setStateId(1);
$em->persist($user);
$em->flush();

这不复杂:http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata。在symfony1.4中它非常简单。

2 个答案:

答案 0 :(得分:2)

您的User实体有一个方法setState(),它采用$state的单个参数。该参数必须是\Frontend\AccountBundle\Entity\States类型。

在您的控制器中,您通过此调用获取该对象:

$state = $this->getDoctrine()->getRepository('FrontendAccountBundle:States')->find(1);

因此,当您设置用户状态时,您无需为ID烦恼。相反,只需直接设置状态,Doctrine将负责其余部分:

$user->setState($state);

答案 1 :(得分:0)

此解决方案适用于我: https://stackoverflow.com/a/14131067/2400373

但是在Symfony 4中,更改getRepository的行:

$role = $this->getDoctrine()
                ->getRepository(Role::class)
                ->find(1);
$usuario->setRole($role);