2013-01-08 4 views
1

В моем приложении Symfony2 люди могут писать тексты, которые будут опубликованы на веб-странице. Существует возможность написать новый текст, и вам нужно выбрать веб-страницу, к которой она будет принадлежать.Как я могу создать поле в форме Symfony2, используя querybuilder, исключая объекты без отношения «многие ко многим»?

Что я хочу достичь, так это то, что этот список веб-страниц показывает веб-страницы, которые еще не имеют только текст. В противном случае вы замените существующий текст.

Так что я хотел бы написать что-то вроде этого в моей форме типа:

$qb->select('wp') 
->from('MyBundle:Webpage', 'wp') 
->where('wp.webtexts is null') 
->orderBy('wp.id'); 

Проблема возникает вокруг «wp.webtexts является недействительным» заявление. Это (полностью функционирующее) отношение «многие ко многим», и я хотел бы проверить, нет ли здесь отношений. Ошибка я получаю, это:

[Semantical Error] line 0, col 70 near 'webtexts is null': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

Как я могу запросить веб-страницы, без каких-либо отношений к любому webtexts?

Добавлено:

Как можно подсчитать количество отношений? Это обозначение:

$qb->where($qb->expr()->count('wp.webtexts < 1')) 

... дает мне:

[Syntax Error] line 0, col 85: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '<'

+0

Я думаю, что вы должны использовать что-то вроде 'count (wp.webtexts) = 0' – Ziumin

+0

Хорошее мышление! Вы знаете, как это можно сделать? Я немного расширил свой вопрос ... –

ответ

4

Если вы пытаетесь проверить против webtexts объекта вы должны запросить поле webtexts идентификатор, а не объект по webtexts. Доктрина все еще пытается писать SQL в конце дня и в SQL вы должны запросить поле:

$qb->select('wp') 
    ->from('MyBundle:Webpage', 'wp') 
    ->leftJoin('wp.webtexts', 'wt') 
    ->where('wt.id IS NULL') 
    ->orderBy('wp.id'); 
+0

Фантастический. Это оно! Спасибо Люку! –

1

Как это:

$em->createQuery('SELECT wp FROM MyBundle:Webpage wp LEFT JOIN wp.webtexts wt WHERE wt.id IS NULL ORDER BY wp.id'); 

Требуется веб-страниц, которые соединены или нет с тексты, а затем устраняют тезисы, которые имеют отношение к тексту ... Итак, у вас есть веб-страницы без отношения!

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

  • Нет связанных вопросов^_^