3
我有兩個簡單的實體:leftJoin教義2
My\Entity\Coupon:
type: entity
table: coupon
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
nullable: false
value:
type: integer
default: 0
My\Entity\CouponUsers:
type: entity
table: coupon_users
id:
id:
type: integer
length: 11
nullable: false
generator:
strategy: AUTO
fields:
coupon_id:
type: integer
length: 11
nullable: false
user_id:
type: integer
現在,我想顯示二手券簡單的統計。
運行該SQL在phpMyAdmin:
SELECT c.name, count(*) AS mycount
FROM coupon c
LEFT JOIN coupon_users u ON c.id = u.coupon_id
GROUP BY c.id
ORDER BY mycount DESC
如預期工作正常,返回:
name1 54
name2 120
然後,我嘗試從學說2做相同的:
$queryBuilder = $this->_em->createQueryBuilder()
->select('c.name, COUNT(*) as co')
->from('My\Entity\Coupon', 'c')
->leftJoin('My\Entity\CouponUsers', 'u',
\Doctrine\ORM\Query\Expr\Join::ON, 'c.id = u.coupon_id')
->where('u.coupon_id = c.id')
->groupBy('c.id');
$dql = $queryBuilder->getDQL();
var_dump($dql);
SELECT c.name,
COUNT(*) as co
FROM My\Entity\Coupon c
LEFT JOIN My\Entity\CouponUsers u
ON c.id = u.coupon_id
WHERE u.coupon_id = c.id
GROUP BY c.id
到目前爲止, 太好了。但是,當我做的:
$queryBuilder->getQuery()->getResult();
我得到錯誤:
[Syntax Error] line 0, col 88: Error: Expected Doctrine\ORM\Query\Lexer::T_DOT, got 'u'
有什麼不對?我怎樣才能解決這個問題?
謝謝。我怎樣才能通過'co'添加訂單?在'co DESC'附近添加' - > orderBy('co','DESC')'返回'[語義錯誤]行0,列91':錯誤:'counter'未定義。 ' - > orderBy('COUNT(c.id)')' – Sfisioza
你輸入的內容 - > orderBy('co','DESC')是正確的,應該可以工作。檢查明顯的第一個:orderBy()需要在groupBy()之後出現,並且您在select()中使用的別名需要與orderBy()中使用的別名相匹配。從錯誤消息中,您可能已經使用了別名。如果它還沒有合作,我很高興看看你的代碼。 – cantera
謝謝。這確實是我的代碼的問題。 – Sfisioza