Учение Сущность находят многие ко многим - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть много ко многим отношениям между продуктами и цветами.

Я пытаюсь найти товары по цветам.

например)

$colours = $em->getRepository('Xxxxx\XxxxxBundle\Entity\Colour')->findBy(array('name'=>'red');
$products = $em->getRepository('Xxxxx\XxxxxBundle\Entity\Product')->findBy(array('colours'=>$colours));

Это мой конфиг Yaml:

Xxxxx\XxxxxBundle\Entity\Product:
  type: entity
  manyToMany:
    colours:
      targetEntity: Colour
      joinTable:
        name: Product_Colour
        joinColumns:
          product_id:
            referencedColumnName: id
        inverseJoinColumns:
          colour_id:
            referencedColumnName: id

.

 Xxxxx\XxxxxBundle\Entity\Colour:
  type: entity
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    hex:
      type: string
      length: 320
    name:
      type: string
      length: 320

Я получаю сообщение об ошибке:

Notice: Undefined index: joinColumns in /home/xxx/public_html/products/vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1217

Может ли кто-нибудь пролить свет на то, почему это не работает?

1 Ответ

10 голосов
/ 21 марта 2012

Я знаю, что это старый вопрос, но если кто-то еще приходит сюда через Google (как я), мне пришлось отказаться от findBy и использовать DQL в репозитории:

$products = $em->getRepository('Vendor\Bundle\Entity\Product')->findByColours($colours);

И вхранилище:

public function findByColours($colours)
{
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb ->select(array('p'))
        ->from('VendorBundle:Product', 'p')
        ->join('p.colours', 'c', 'WITH', $qb->expr()->in('c.id', $colours));
    $result = $qb->getQuery()->execute();
    return $result;

}

Возможно, вам потребуется изменить объединение в зависимости от значения $ colors.Предполагается, что это массив идентификаторов цветов.Если это строка, вы можете отказаться от in() или если это массив строк, вам необходимо связать строки как параметры (см. Следующую ссылку).Разъяснение по expr () и тому подобное есть в Doctrine docs

Я не знаю, почему Undefined index: joinColumns происходит, но это метод, чтобы вообще обойти его.Надеемся, что кто-то может прояснить эту ошибку, поскольку мое решение добавляет дополнительную работу в отношение «многие ко многим».

...