我的代码:
$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实体吗?
答案 0 :(得分:0)
从Doctrine2的角度来看,你的对象应该形成一个对象图,其中外键没有位置。因此,我发现你真的很奇怪
我不确定它在2.0中是怎么回事,但我不记得在属性中有相关对象的id。
因此,您应该删除$ account_id属性,并使用$ item-> setAccount($ account),其中$ account是Account类的对象,以便Doctrine正确处理该关系。
您还可以尝试让Doctrine为您生成实体骨架:
php doctrine.php orm:generate-entities /tmp/entites
检查/ tmp / entities中生成的文件,你会看到应该怎么看。