已下载Symfony和DataFixtureBundle(http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html)
我的数据库结构:
一般来说:
book
会有很多标题,每个headline
都有很多评论。这是一种非常简单的一对一关系。
在db中,索引FK都已设置完毕。
然后我写了4个夹具文件:
<?php
namespace tr\rsywxBundle\DataFixtures\ORM;
use \Doctrine\Common\DataFixtures\AbstractFixture;
use \Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use \Doctrine\Common\Persistence\ObjectManager;
use \tr\rsywxBundle\Entity\BookPlace as BookPlace;
class LoadPlaceData extends AbstractFixture implements OrderedFixtureInterface
{
/**
*
* {@inheritDoc}
*/
public function load(ObjectManager $manager)
{
//Create a common place
$place1=new BookPlace();
$place1->setName('Common');
$this->addReference('commonPlace', $place1);
//Create a special place
$place2=new BookPlace();
$place2->setName('Special');
$this->addReference('specialPlace', $place2);
$manager->persist($place1);
$manager->persist($place2);
$manager->flush();
}
/**
*
* {@inheritDoc}
*/
public function getOrder()
{
return 2;
}
}
所有其他3个都相似。 1为publisher
,place
为2,book
为3,headline
为4。
尝试加载数据时,总是说:
但是,如果我在headline
load()函数中没有放任何东西,它可以正常工作。这意味着,book
正在从publiser
和place
获取引用。该错误还表明LoadBook fixture文件中的getReference
不起作用。
这个捆绑包不支持这种级联的一对多关系吗?
答案 0 :(得分:1)
照顾你给田地的名字:
在任何数据库中都有一个保留字列表
(http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html)和“show”似乎是保留的。
答案 1 :(得分:0)
我已经确定了问题所在。
setBookid($this->getReference(...))
只有在以下情况下才有效:
headline
表的bookid
列引用了book
表格的PK。 在我的情况下,book
表中的PK是自动增量,而在我当前的设置中,headline
表的bookid
指的是唯一索引,其他比PK。
因此,即使上述设置适用于正常设置,数据夹具也很聪明地从引用的对象中获取bookid
。从而产生问题。