我在做什麼錯:DQL定製回購內部
public function findAllVendorsByCategory ($categoryId)
{
$em = $this->getEntityManager();
$vendors = $em->createQueryBuilder('v')
->distinct()
->innerJoin('v.category', 'c')
->where('c.id = :category_id')
->setParameter('category_id', $categoryId)
->getQuery()
->iterate()
;
return $vendors;
}
我特別正的錯誤是:
No alias was set before invoking getRootAlias().
我已經嘗試添加選擇(),並沒有什麼工作 - 這個代碼工作在控制器的上下文中創建時很好 - 但是當我將它移動到它自己的repo時 - poof!?!
想法?
編輯|最新嘗試
$vendors = $em->createQueryBuilder()
->distinct()
->from('Vendor', 'v')
->innerJoin('category', 'c', JOIN::ON, 'v.category_id = c.id')
->where('c.id = :category_id')
->setParameter('category_id', $categoryId)
->getQuery()
->iterate()
;
這將產生DQL,如:
SELECT DISTINCT FROM Vendor v INNER JOIN category c ON v.category_id = c.id WHERE c.id = :category_id
但是,當我在斌/控制檯或通過應用評估DQL我得到:
[Syntax Error] line 0, col 16: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got 'FROM'
你有沒有在你的實體的'@Entity()'註釋中註冊repositoryClass? – dbrumann
在存儲庫中使用'$ this-> createQueryBuilder'(例如存儲庫中的方法),或者在使用EntityManager版本時使用' - > from(...)'添加要選擇的實體/表格'createQueryBuilder'。 – ccKep
選擇整個實體時,groupBy是要走的路 - 只能選擇不同的標量值。你的查詢有什麼獨特之處?我想你的ID是獨一無二的? – ccKep