2014-01-27 2 views
1

Скачан Symfony и DataFixtureBundle (http://symfony.com/doc/current/bundles/DoctrineFixturesBundle/index.html)Symfony DataFixtures Wierd поведение при обращении другой записи

Моя дб структура:

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 - это груз publisher, 2 для place, 3 для book, 4 для headline.

При попытке загрузить datafixtures, он всегда говорит:

enter image description here

Однако, если я не положил ничего в headline нагрузки() функцию, она отлично работает. Это означает, что book получает ссылку от publiser и place. Ошибка также показывает, что getReference в файле инвентаря LoadBook не работает.

Этот комплект не поддерживает такое каскадное отношение «один-много»?

+0

В LoadHeadLine.php есть ошибка уведомления, можете ли вы показать его plz? – VBee

+0

@VBee Я не заметил ошибку уведомления? – TaylorR

ответ

0

Я определил проблему.

setBookid($this->getReference(...)) может быть эффективным только тогда и только тогда, когда:

  1. bookid В столбце headline таблицы ссылается PK в book таблицы.

В моем случае, PK в book таблицы является автоматическим приращением, в то время как в моей текущей установке, headline таблицы bookid имеет в виде уникальный индекс, отличный от ПК.

Итак, несмотря на то, что приведенная выше настройка работает нормально при нормальной настройке, приборы для измерения данных являются интеллектуальными, чтобы захватить bookid от объекта, на который делается ссылка. Таким образом, возникает проблема.

1

Уход за имя, которое вы даете своим полям:

есть список зарезервированных слов в любой базе данных

(http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html) и «шоу», кажется, защищены.

+0

удалил этот столбец «показать» и повторно импортировать, восстановить объекты и повторно запустить загрузку, но все равно ту же ошибку. – TaylorR

Смежные вопросы