1

当单元格与另一个表相关时,如何创建新对象?就我而言,存在一个包含状态的表,例如 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;
....

实体/用户.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;
}

我的帐户控制器:

....
$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 中这太容易了。

4

2 回答 2

2

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

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

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

所以当你去设置用户的状态时,你不需要为 ID 操心。相反,只需直接设置状态,Doctrine 会处理其余的:

$user->setState($state);
于 2013-01-02T23:49:01.580 回答
0

这个解决方案对我有用: https ://stackoverflow.com/a/14131067/2400373

但在 Symfony 4 中更改以下行getRepository

$role = $this->getDoctrine()
                ->getRepository(Role::class)
                ->find(1);
$usuario->setRole($role);
于 2018-12-14T14:57:33.747 回答