2016-12-02 4 views
0

У меня есть много-много отношений в проекте symfony 2, и я пытаюсь создать левое соединение на нем, но у меня есть ошибка. Я прочитал сто документов и сообщений, но я не могу найти решение. Надеюсь, что вы могли бы мне помочь выяснить :)Symfony 2 left join with many to many relationship получено сообщение InvalidPathExpression

Здесь ошибка:

[Семантическая Error] строка 0, столбец 162 'рядом пользователей = и где': Ошибка: недопустимый PathExpression. StateFieldPathExpression или SingleValuedAssociationField ожидается.

Вот мои отношения:

AdminBundle\Entity\KeywordNeed: 
    ... 
manyToMany: 
     users: 
      targetEntity: User 
      mappedBy: keywordNeeds 

И другая организация:

AdminBundle\Entity\User: 
... 
keywordOffers: 
      targetEntity: AdminBundle\Entity\KeywordOffer 
      inversedBy: users 
      nullable: true 
      joinTable: 
       name: users_keywordoffer 
       joinColumns: 
        user_id: 
         referencedColumnName: id 
       inverseJoinColumns: 
        keywordoffer_id: 
         referencedColumnName: id 

и, наконец, запрос SQL я произвожу:

SELECT distinct u FROM AdminBundle\Entity\Network n 
INNER JOIN AdminBundle\Entity\User u WITH n.startup = u 
LEFT JOIN AdminBundle\Entity\KeywordOffer ko WITH ko.users = u 
WHERE n.network = :oUser 
AND (u.lastName like '%blabla%' OR u.firstName like '%blabla%' OR u.company like '%blablaa%') 
AND ko in ('7','6') 

Спасибо за вашу помощь

ответ

0

Вы можете просто использовать имя поля в качестве клея для присоединиться insetad использования С:

SELECT distinct u FROM AdminBundle\Entity\Network n 
INNER JOIN AdminBundle\Entity\User u WITH n.startup = u 
LEFT JOIN u.keywordOffers ko 
... 

В действительности С п полезно, если вы хотите добавить еще соединяющее ограничение или присоединиться к двум не связанным сущностям. Если сеть также подключена к пользователям в поле запуска, вы также можете повысить уровень DQL:

SELECT distinct u FROM AdminBundle\Entity\Network n 
INNER JOIN n.startup u 
LEFT JOIN u.keywordOffers ko 
... 

Надеюсь, это поможет.

0

Спасибо за ваш ответ. К несчастью, я когда-либо пробовал это, и результат был неудачным. Но я нашел другой способ сделать это. Я разрезал запрос в двух разных запросах. Сначала я фильтрую свое внутреннее соединение, а затем создаю еще один результат с левым соединением.