Symfony2和Doctrine - 如何从连接表中插入项目

时间:2013-01-21 20:52:25

标签: symfony doctrine

我有两个表,gameown。在own的实体中,我创建了OneToMany关系:

 /** @ORM\ManyToOne(targetEntity="Game") */ 
 private $game;

game实体字段id中也会映射:

* @ORM\OneToMany(targetEntity="Own", mappedBy="game")

现在我在数据库中插入新数据时遇到问题。我试过简单地持久化对象:

$gameown = new Own();
$gameown -> setGame('3');
$gameown -> setUpdated(date("Y-m-d H:i:s"));

$em = $this->getDoctrine()->getEntityManager();
$em->persist($gameown);
$em->flush();

但它不起作用。 Symfony说它必须是Game实例,而不是字符串。怎么解决这个问题?

当我尝试这个时:

$gameown -> setGame($game->getId('3'));

插入正常,但是......空值。

2 个答案:

答案 0 :(得分:2)

你也可以这样做

$gameObject = $em->getRepository('YourBundle:Game')->findOneBy(array('id' => 3));

然后你可以使用

$gameown->setGame($gameObject);

答案 1 :(得分:1)

实际上,你必须使用游戏对象,而且教条将为你完成工作。 用对象思考,而不是用表。

首先,您必须检索对象(例如,从数据库中):

$em = $this->getDoctrine()->getEntityManager();
$game = $em->getRepository('AppMonBundle:Game')->find(3);

然后,您可以设置关系:

$gameown->setGame($game);