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;
....

エンティティ/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;
}

私のアカウントコントローラー:

....
$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

エンティティには、 の 1 つのパラメータを取るUserメソッドがあります。そのパラメータはタイプでなければなりません。setState()$state\Frontend\AccountBundle\Entity\States

コントローラーでは、次の呼び出しを通じてそのオブジェクトを取得します。

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

そのため、ユーザーの状態を設定するときに、ID を気にする必要はありません。むしろ、State を直接設定するだけで、残りは Doctrine が処理します。

$user->setState($state);
于 2013-01-02T23:49:01.580 に答える