2016-07-24 62 views
1

搜索该查询使我获得给定的球队标识的所有球员,当他的身体状态是等于2主义查询生成器 - 在两个表

$qb = $this->createQueryBuilder('player') 
    ->where('player.physicalState= 2') 
    ->join('player.team', 'team') 
    ->addSelect('team') 
    ->where('team.id = :id') 
    ->setParameter('id', $teamId); 

return $qb->getQuery()->execute() 

但事实是:我也有另一种表OLD_TEAM。玩家与TEAM和OLD_TEAM有一对多的关系。所以玩家可以链接到TEAM或OLD_TEAM。

所以我想改善/完成我的查询到有类似

搜索我在球队的球员与球队表ID X。如果这不存在,我想搜索相同的但在OLD_TEAM表。

我不知道这个解决方案是否是搜索的最佳解决方案,请不要犹豫,告诉我是否存在一些更简单的解决方案。

PS:OLD_TEAM和TEAM对PK使用相同的序列。

谢谢。

+0

您也可以尝试使用不同的连接类型。添加.leftJoin('player.team','team')。leftJoin('player.old_team','old_team'),然后查看发生了哪一个。但是,你应该真的认为数据结构,例如。那属于多支球队的球员呢?那不仅仅是两支球队的球员呢?等等... – tarlepp

回答

0

感兴趣,我关注。

然后,我认为在这种情况下,你可以使用一个简单的OR。

0

不确定这是可能的查询建造者,但纯SQL是。您可以使用的一个示例Checking whether an item does not exist in another table

+0

我个人会改变数据结构,以便这些查询更容易。例如。你可以使用实体:player,team,player_in_team和那个player_in_team有列; player_id,team_id,date_start,date_end与这个数据结构,你应该很容易在每个玩家在特定日期玩的地方。 – tarlepp