这是一个Doctrine 2.2外键错误?

时间:2012-04-26 11:57:39

标签: php foreign-keys doctrine-orm

我的代码:

        $item = new Entity\Item();

        $item->setAccountId($account["id"]);
        $item->setCategory((string)$data->category);
        $item->setRegion((string)$data->region);
        $item->setFlag(0);
        $item->setRank(0);
        $item->setPhone("");
        $item->setEmail("");
        $item->setURL((string)$data->url);
        $item->setTags($tags);

        //var_dump($item);
        //die();

        $this->em->persist($item);
        $this->em->flush();
        $this->em->clear();

注释关系:

/////////////////////////////////////////////////////////////////////////
// Relations                                                     //
/////////////////////////////////////////////////////////////////////////

/**
* @ManyToOne(targetEntity="Account", inversedBy="items")
* @JoinColumn(name="account_id", referencedColumnName="id")
*/
private $account;

/////////////////////////////////////////////////////////////////////////
// ForeingKey                                                           //
/////////////////////////////////////////////////////////////////////////

/**
 * @Column(type="integer")
 */
protected $account_id;   

如果我使用旧的doctrine(2.0)代码工作,如果我设置为2.2,代码抛出此异常:

  

SQLSTATE [23000]:完整性约束违规:1048列'account_id'不能为空

在2.2中,我需要使用Parent实体插入Chield实体吗?

1 个答案:

答案 0 :(得分:0)

从Doctrine2的角度来看,你的对象应该形成一个对象图,其中外键没有位置。因此,我发现你真的很奇怪

  • 有一个attribute_id属性,它是一个外键
  • 说它工作在2.0

我不确定它在2.0中是怎么回事,但我不记得在属性中有相关对象的id。

因此,您应该删除$ account_id属性,并使用$ item-> setAccount($ account),其中$ account是Account类的对象,以便Doctrine正确处理该关系。

您还可以尝试让Doctrine为您生成实体骨架:

php doctrine.php orm:generate-entities /tmp/entites

检查/ tmp / entities中生成的文件,你会看到应该怎么看。