首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原则2/多对一获得对象

原则2/多对一获得对象
EN

Stack Overflow用户
提问于 2016-04-09 21:45:01
回答 1查看 423关注 0票数 0

我有三个表格/实体:

  • 游戏
  • SiteGames
  • 站点

我必须在Doctrine 2中编写查询,这将使所有游戏(作为对象)都可用于特定站点(将此特定站点作为对象)。唯一的关系(多到一个)在表/实体SiteGame中,它包含列/对象:

  • 游戏/游戏id
  • 站点/站点id

通常,原始SQL看起来(并且会工作):

代码语言:javascript
复制
SELECT g FROM site_games s INNER JOIN games g ON g.id=s.game_id WHERE site_id='4';

这是我尝试过的理论,但失败了:

代码语言:javascript
复制
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select("s.game")
            ->from("MyBundle:SiteGame","s")
            ->where("s.site = :site")
            ->setParameter("site",$site);

错误:无效的PathExpression。一定是StateFieldPathExpression。

代码语言:javascript
复制
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select("g")
            ->from("MyBundle:SiteGame","s")
            ->join("s.game","g")
            ->where("s.site = :site")
            ->setParameter("site",$site);

错误:如果不选择至少一个根实体别名,则无法通过标识变量选择实体。

还有更多的具有类似错误的不同组合。

我在整个互联网上找不到任何有用的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 23:28:35

我假定Games实体没有与SiteGamesOneToMany关系。您在这里有几种选择:

  • 如果SiteGames没有任何其他属性( gamesite ),则可以完全删除该实体并使用正确的ManyToMany映射。
  • OneToMany映射添加到Games
  • 从理论2.4开始,您可以使用任意的联接语法,并编写如下内容: $this->getEntityManager()->createQueryBuilder() ->select(' Game ') ->from('MyBundle:Game','Game') ->join('MyBundle:SiteGame','SiteGame','WITH',SiteGame.game=Game和SiteGame.site = :site') ->setParameter('site',$site) ->getQuery() ->getResult();

我同意第一种选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36523098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档