【问题标题】:Doctrine query builder - Search in two tablesDoctrine 查询生成器 - 在两个表中搜索
【发布时间】:2016-11-27 21:44:56
【问题描述】:

这个查询让我可以得到所有给定球队ID的球员,当他的身体状态等于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。 Player 与 TEAM 和 OLD_TEAM 是一对多的关系。因此,玩家可以链接到 TEAM 或 OLD_TEAM。

所以我想改进/完成我的查询以得到类似的东西

在 TEAM 表中搜索我的团队中 ID 为 x 的球员。如果这不存在,我想在 OLD_TEAM 表中搜索相同的内容。

我不知道此解决方案是否是搜索该解决方案的最佳解决方案,如果有更简单的解决方案,请随时通知我。

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

谢谢。

【问题讨论】:

  • 您也可以尝试使用不同的连接类型。添加 .leftJoin('player.team', 'team').leftJoin('player.old_team', 'old_team') 然后看看发生了哪一个。但是恕我直言,您真的应该认为数据结构,例如。属于多支球队的球员呢?那些不止在两支球队效力的球员呢?等等……

标签: php symfony doctrine-orm


【解决方案1】:

不确定是否可以使用 querybuilder 但使用纯 SQL。您可以使用一个示例Checking whether an item does not exist in another table

【讨论】:

  • 我个人会改变数据结构,这样这类查询就更容易了。例如。你可以使用实体: player, team, player_in_team 并且 player_in_team 有列; player_id, team_id, date_start, date_end 使用该数据结构,您应该可以很容易地了解每个球员在特定日期的比赛情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多