【发布时间】:2016-07-18 19:32:32
【问题描述】:
我正在尝试与学说查询生成器进行联接。
$query = $this->createQueryBuilder('od');
$query->innerJoin(Order::class, 'o', Expr\Join::WITH, 'o.orderid = od.orderid');
$query->where('o.userid = :userid')
$query->andWhere('od.orderstatusid IN (:orderstatusid)')
$query->setParameter('userid', $userid);
$query->setParameter('orderstatusid', array(5, 6, 7, 8, 10))
请求失败,因为生成的 SQL 是:
SELECT od FROM OrderDetail od INNER JOIN Order o WITH o.orderid = od.orderid WHERE o.userid = :userid AND od.orderstatusid IN (:orderstatusid)
或者应该是
SELECT od FROM OrderDetail od INNER JOIN Order o ON o.orderid = od.orderid WHERE o.userid = :userid AND od.orderstatusid IN (:orderstatusid)
我不能使用 $query->innerJoin(Order::class, 'o', Expr\Join::ON, 'o.orderid = od.orderid');因为我收到了这个错误:
[Syntax Error] line 0, col 91: Error: Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'
如果我不使用连接条件,则学说不会从模型中得到它,所以我没有好的结果。
如何使用 querybuilder 进行连接和位置?
感谢您的帮助
编辑: 这是模型:
OrderDetail:
type: entity
table: order_detail
repositoryClass: OrderDetailRepository
id:
orderdetailid:
type: integer
nullable: false
options:
unsigned: false
id: true
fields:
...
lifecycleCallbacks: { }
manyToOne:
order:
targetEntity: Order
inversedBy: orderdetails
joinColumn:
name: orderid
referencedColumnName: orderid
Order:
type: entity
table: order
id:
orderid:
type: integer
nullable: false
options:
unsigned: false
id: true
fields:
lifecycleCallbacks: { }
oneToMany:
orderdetails:
targetEntity: OrderDetail
mappedBy: order
fetch: EAGER
【问题讨论】:
-
你在做什么看起来不错。 WITH是DQL,不是SQL,你确定那是实际生成的SQL吗?另外,请同时发布您的实体关系。
-
我用我的模型编辑
标签: php doctrine-orm doctrine symfony