2013-01-08 39 views
1

在我的Symfony2應用程序中,人們可以編寫將在網頁上發佈的文本。 有一個選項可以寫一個新的文本,你必須選擇它將屬於的網頁。如何使用querybuilder在Symfony2表單中創建一個字段,排除沒有多對多關係的實體?

我想實現的是,這個網頁列表顯示的網頁只有一個文字。否則,您將最終替換現有文本。

所以我想寫點東西像這樣在我的表單類型

$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 id字段,而不是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'); 

它需要被加入或不符合網頁文本,然後消除與文本有關係的東西...所以你有沒有關係的網頁!

相關問題