Doctrine DBAL查询buider连接和where子句

时间:2015-07-29 21:30:46

标签: mysql symfony doctrine-orm

要生成报告I(即每当某个日期某个值不存在时为0)我使用日历表。

问题是我的查询中的任何额外条件都需要进入join子句。这使得其他如此灵活的QB非常不灵活。

$this->query->select('dt AS date, count o.orderId) as orders');
$this->query->from('calendar_table', 'ct');
$this->query->leftJoin('ct', 'orders', 'o', 
    'o.orderDate = ct.dt AND o.SOME_EXTRA_CONDITION = VALUE');
$this->query->groupBy('dt');

问题是o.SOME_EXTRA_CONDITION = VALUE部分。有什么方法可以从join子句和一个额外的QB调用中获得这个条件,比如

$this->query->where(o.SOME_EXTRA_CONDITION = VALUE)?

当然将条件置于正常的where子句中会产生相同的结果,因为在最终结果的连接之后发生了,但我需要的只是右表上的where子句之前加入。

1 个答案:

答案 0 :(得分:0)

来自official doctrine documentation

leftJoin示例
// Example - $qb->leftJoin('u.Phonenumbers', 'p', Expr\Join::WITH, $qb->expr()->eq('p.area_code', 55))
// Example - $qb->leftJoin('u.Phonenumbers', 'p', 'WITH', 'p.area_code = 55')
// Example - $qb->leftJoin('u.Phonenumbers', 'p', 'WITH', 'p.area_code = 55', 'p.id')
public function leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null);

尝试相应地更改leftJoin

$this->query->leftJoin('ct.orders', 'o', 'WITH','o.orderDate = ct.dt AND o.SOME_EXTRA_CONDITION = VALUE');