簡體   English   中英

Symfony2 / Doctrine:使用OneToMany基數來查找

[英]Symfony2 / Doctrine : findBy with OneToMany cardinality

我想是否有可能(以及如何)將OneToMany關系基數用作findBy過濾器。

例如,在這里,我有兩個實體UserPost ,它們之間具有OneToMany關系,這樣一個用戶就有了一個帖子集合。

我正在尋找一種方法來獲取所有至少發布一個帖子的用戶,也就是說:
|user.posts| >= 1 |user.posts| >= 1或更多以編程方式count(user->getPosts()) >= 1

我知道可以使用QueryBuilder或DQL來實現,但是我很確定有一個技巧可以使它與findBy一起findBy

這是我願意做的事情:

class UserRepository extends EntityRepository
{
    public function myQuery()
    {
        return $this->findBy(
            array(... 'posts' ...), // What should I put here ?
            array('email' => 'ASC')
        );
    }
}

評論中的人是完全正確的,所以我總結一下:

  • findBy不適用於OneToMany ,尤其是因為您findBy相關實體的數量進行查找。

  • 這意味着您必須使用QueryBuilder

在您的UserRepository ,使用以下命令:

$qb = $this->createQueryBuilder('users')
    ->leftJoin('user.posts', 'posts')
    ->addGroupBy('users')
    ->having('COUNT(posts) >= :limit')
    ->setParameter('limit', 1);
  • 由於在您的用例中,要選擇的Posts限制為1,如@Yoshi所述,您可以使用INNER JOIN代替GROUP BY + HAVING ,這將自動取消選擇沒有Post Users

代替上面的內容,使用以下命令:

$qb = $this->createQueryBuilder('users')
    ->innerJoin('user.posts', 'posts');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM