Symfony DataFixtures在引用另一条记录时出现了奇怪的行为

时间:2014-01-27 12:52:37

标签: php symfony doctrine-orm

已下载Symfony和DataFixtureBundle(http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html

我的数据库结构:

DB Structure (partial)

一般来说:

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为publisherplace为2,book为3,headline为4。

尝试加载数据时,总是说:

enter image description here

但是,如果我在headline load()函数中没有放任何东西,它可以正常工作。这意味着,book正在从publiserplace获取引用。该错误还表明LoadBook fixture文件中的getReference不起作用。

这个捆绑包不支持这种级联的一对多关系吗?

2 个答案:

答案 0 :(得分:1)

照顾你给田地的名字:

在任何数据库中都有一个保留字列表

http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html)和“show”似乎是保留的。

答案 1 :(得分:0)

我已经确定了问题所在。

setBookid($this->getReference(...))只有在以下情况下才有效:

  1. headline表的bookid列引用了book表格的PK。
  2. 在我的情况下,book表中的PK是自动增量,而在我当前的设置中,headline表的bookid指的是唯一索引,其他比PK。

    因此,即使上述设置适用于正常设置,数据夹具也很聪明地从引用的对象中获取bookid。从而产生问题。