doctrine 2 - 使用复合键保持实体

时间:2011-04-17 22:50:50

标签: php orm doctrine-orm composite

具有复合键的Doctrine 2实体:

/**
 * @Entity 
 */
class Test
{
    /**
     * @Id
     * @Column (type="integer", length=11, name="id")
     *
     */
    protected $id = null;

    /**
     * @Id
     * @Column (type="integer", length=11, name="idtwo")
     *
     */
    protected $idtwo = null; 

    public function setIdTwo($id)
    {
        $this->idtwo = $id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

}

保存实体

$test = new Test();
$test->setId(1);
$test->setIdTwo(1);
$em->persist($test);

数据库表:

CREATE TABLE `Bella_Test` (
  `id` int(11) NOT NULL,
  `idtwo` int(11) NOT NULL,
  PRIMARY KEY (`id`,`idtwo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

预期结果:将一行添加到具有两个id字段的db表中,两个值都为1。

实际结果:没有向db表添加行。没有例外。

问题:发生了什么事?

1 个答案:

答案 0 :(得分:0)

您可以使用try catch块来查看会发生什么

try{
    $em->flush(); //don't forget flush after persisting an object
}
catch(Exception $e){
   echo 'Flush Operation Failed: '.$e->getMessage();   
}

其他假设,在我看来,您的实体表名称和数据库表名称可能彼此不匹配。我认为试一试

并不是一个坏主意
/**
 * @Entity 
 * @Table(name="Bella_Test")
 */
 .
 .
 .