2013-08-20 3 views
5

У меня есть следующая структура Entities в моем проекте.Неопределенный индекс: joinColumns doctrine + symfony2

class MyEntity 
{ 
[... some more fields...] 
/** 
* @Type("array<string, string>") 
* @ORM\ManyToMany(targetEntity="Me\MyBundle\Entity\Example") 
* @ORM\JoinTable(name="example_myentity", 
*  joinColumns={@ORM\JoinColumn(name="plan_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="example", referencedColumnName="label")} 
*) 
*/ 
private $example; 
} 



class Example 
{ 

/** 
* @ORM\Id 
* @ORM\Column(name="label", type="string", length=50, unique=true, nullable=false) 
*/ 
private $label; 
} 

Когда я попытался получить "$ пример" с помощью функции findby() из Доктрины я получил следующее уведомление:

Неопределенные индекс: joinColumns

Я пытался отладки это, и проблема, кажется, находится в файле доктрины BasicEntityPersister.php в функции

_getSelectEntitiesSQL($criteria, $assoc = null, $lockMode = 0, $limit = null, $offset = null, array $orderBy = null), 

Я заметил в трассировке стека, что второй параметр «$ assoc» всегда равен нулю, и я думаю, поэтому Doctrine не делает инструкцию JOIN.

Любая идея?

Благодаря

+0

Вы обновили базу данных? – rpg600

+0

Да, это все актуально. Обновление базы данных, очистка кэша ... – user2528085

+0

Если это много для многих, то не должно быть MyEntity. $ Example be $ examples? Вы инициализируете его как массив доктрин в конструкторе? http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html – Cerad

ответ

4

Я считаю, что это ошибка, возможно, this one.

У меня такая же проблема, и единственное решение на данный момент похоже на ожидание обновления для BasicEntityPersister или запись вашего запроса, который довольно прямолинейный.

Сначала добавьте репозиторий в класс

/** 
* MyClass 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\MyClassRepository") 
*/ 
class MyClass 
... 

Затем в repositoryclass:

class MyClassRepository extends EntityRepository 
{ 
    public function findByExample(Example $example) 
    { 
     return $this->getEntityManager() 
       ->createQueryBuilder() 
       ->select('m') 
       ->from('AcmeDemoBundle:MyClass', 'm') 
       ->innerJoin('m.examples', 'e') 
       ->where('e.id = :exampleid') 
       ->setParameter('exampleid', $example->getId()) 
       ->getQuery() 
       ->getResult(); 
    } 
} 

Тогда, наконец, вы можете получить все экземпляры MyClass, связанные с примером по:

$this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:MyClass')->findByExample($example); 
+0

Я тоже считаю, что это ошибка, я создал следующий отчет об ошибке: http://www.doctrine-project.org/jira/browse/DDC-2988 В котором также содержится исправление, исправляющее проблему. –

+0

Ссылка на ошибку мертва – shakaran

+0

@shakaran - спасибо, я обновил ссылку –

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