【问题标题】:Doctrine2 Joining tables with WITH clauseDoctrine2 使用 WITH 子句连接表
【发布时间】:2013-08-22 08:57:05
【问题描述】:

我有一个用户实体和一个通过外键链接到用户的 UserData 实体。

User 实体具有以下映射:

    /**
 * @ORM\OneToOne(targetEntity="UserData", cascade={"persist", "remove"})
 * @var integer
 */
protected $userData;

而 UserData 有一个简单的 ID 字段:

    /**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 * @var integer
 */
protected $id;

好的;我想检索一个用户实体,其 UserData 具有字段“NIN”值“A00000000”;我正在尝试使用此 DQL 查询:

SELECT u FROM eCommerceUserBundle:User u JOIN eCommerceUserBundle:UserData ud ON u.userData = ud.id WHERE ud.NIN = :NIN

但我收到此错误:

预期的 Doctrine\ORM\Query\Lexer::T_WITH,得到 'ON'

所以...我尝试退出 ON 子句,如下所示:

SELECT u FROM eCommerceUserBundle:User u JOIN eCommerceUserBundle:UserData ud WHERE ud.NIN = :NIN

现在的问题是 Doctrine 的原始查询:

    SELECT 
  u0_.id AS id0, 
  u0_.email AS email1, 
  u0_.password AS password2, 
  u0_.created AS created3, 
  u0_.lastLogin AS lastLogin4, 
  u0_.confirmed AS confirmed5, 
  u0_.blocked AS blocked6, 
  u0_.particularData_id AS particularData_id7, 
  u0_.institutionalData_id AS institutionalData_id8, 
  u0_.administratorData_id AS administratorData_id9 
FROM 
  user u0_ 
  INNER JOIN userData u1_ ON (u1_.NIN = ?)

看来,Doctrine 正在将我的 WHERE 子句推入 ON 子句...

我能做什么?

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:

    DQL QUERY 应该是这样的:

    SELECT u, ud 
    FROM eCommerceUserBundle:User u 
    JOIN u.userData ud
    WHERE ud.NIN = :NIN
    

    您可以通过从 SELECT 子句中删除 ud 来选择用户及其 userData 或不选择用户 - 尽管如此,仍将返回 User 对象数组,但从一开始就填写 userData - 不选择它将首先触发在$user->getUserData() 上对数据库进行新查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多