【问题标题】:How to use join table (ManyToMany relation) in queryBuilder如何在 queryBuilder 中使用连接表(ManyToMany 关系)
【发布时间】:2014-04-14 20:53:47
【问题描述】:

我有一个双向的 ManyToMany 关系:Team Championships 有一个 Championships_teams 加入表。

我想先获得所有战队并按特定锦标赛中的战队排序。

一个简单的 sql 查询可以得到这个:(在 Mysql 中 null 优先)

select * 
from team left join championships_teams
            on id=team_id
            and championship_id=:specific_id
order by championship_id desc

我尝试使用查询生成器来做到这一点,但没有成功。
我可以使用查询生成器来执行这种类型的查询,而无需将 Champions_teams 映射为实体吗?

【问题讨论】:

  • 似乎不可能link。我不能使用本机查询,因为我想在“query_builder”选项的表单中使用查询。我必须找到订购我的查询的 dql 查询。

标签: symfony doctrine-orm


【解决方案1】:

看看我对这个问题的回答 - symfony2 doctrine findBy id in arrayCollection

这似乎是一个类似的问题。您需要使用 'MEMBER OF' 修饰符。

【讨论】:

    【解决方案2】:

    我终于解决了我的麻烦:通过具有空值的查询排序以在表单中使用结果。

    1. 我们无法通过 DQL 访问关系表:How do you join two tables in Doctrine2 using Query Builder if the table relationships are not setup?。但我不能使用本机查询,因为我想获取一个 QueryBuilder 对象以在实体表单中使用它。
    2. 进行符合 DQL 的 sql 查询。

      SELECT t.*,IFNULL(c.year,0) as year
      FROM Team t LEFT JOIN championships_teams ct 
              ON t.id = ct.team_id 
          LEFT JOIN Championship c 
              ON c.id = ct.championship_id 
              AND c.id = 76 
      WHERE e.league_id = 1
      ORDRE BY year;
      
    3. 通过使用隐藏字 How can I order by NULL in DQL? 传递错误 Expected argument of type "object or array", "string" given。终于有了我的 DQL 查询:

      $qb = $this->createQueryBuilder('t')        
                  ->leftJoin('t.championships', 'c',Expr\Join::WITH,'c.id = :champ_id' )
                  ->setParameter('champ_id', $champ->getId())
                  ->addSelect('IFNULL(-c.year,0) as HIDDEN year')
                  ->where('t.league=:league_id')      
                  ->setParameter('league_id', $champ->getLeague())
                  ->addorderBy('year')
                  ->addorderBy('t.nom');
      return $qb;
      

    我认为我的问题表述得不好。希望这可以帮助某人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2018-12-03
      • 2011-09-27
      • 2014-11-15
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多