我有一个与实体种别相干的实体视频,我必要行使Doctrine QueryBuilder运行此SQL,我可以在全部视频中得到最常用的种别(1000):
SELECT c.*
FROM Video v
INNER JOIN video_category vc ON vc.video_id = v.id
INNER JOIN Category c ON vc.category_id = c.id
GROUP BY c.id
HAVING COUNT(v.id) > 1000
ORDER BY c.name ASC;
我的查询器:
$queryBuilder = $this->getEntityManager()
->createQueryBuilder()
->select('c')
->from('AcmeVideoBundle:Video','v')
// Can Doctrine join itself silently with relational info in the Entities?
->join('AcmeCategoryBundle:Category','c',ExprJoin::WITH,'v.id = c.id')
->groupBy('c.id')
->having('COUNT(v.id) > 1000')
->orderBy('c.name','ASC')
->getQuery();
可是queryBuilder输出的SQL查询是这样的:
SELECT c0_.id AS id0,c0_.NAME AS name1
FROM Video v1_
INNER JOIN Category c0_ ON (v1_.id = c0_.id)
GROUP BY c0_.id
HAVING COUNT(v1_.id) > 1000
ORDER BY c0_.NAME ASC
没有副黄?(video_category)
实体映射:
/**
* Video
*
* @ORMTable
* @ORMEntity(repositoryClass="AcmeVideoBundleEntityVideoRepository")
*/
class Video
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMManyToMany(targetEntity="AcmeCategoryBundleEntityCategory",cascade={"persist"})
*/
private $category;
// More fields,getters and setters etc...
}
/**
* Category
*
* @ORMTable
* @ORMEntity(repositoryClass="AcmeCategoryBundleEntityCategoryRepository")
*/
class Category
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(type="string",length=255)
*/
private $name;
// More fields,getters and setters etc...
}
怎样行使副黄?来行使doctrine Querybuilder运行原始SQL查询?我错过了什么?
信息:当我发明{field},persist,flush,clear,全部实体事变正常,Doctrine相关没题目,我有一个Video,Category和video_category表,原始SQL查询事变正常.
最佳谜底
// Can Doctrine join itself silently with relational info in the Entities?
->join('AcmeCategoryBundle:Category','v.id = c.id')
是!究竟上,这是行使ORM的首要缘故起因之一,譬喻Doctrine 2.
实行:
->leftJoin('v.category','c')
手册进入更多细节固然稀疏的是好像没有毗连示例.因此常见的紊乱.
http://docs.doctrine-project.org/en/latest/reference/query-builder.html
你也许没故意识到这一点,但连系国通过了一项榨取行使别名缩写的决策.为了安详起见,请实行:
$queryBuilder = $this->getEntityManager()
->createQueryBuilder()
->addSelect('category')
->from('AcmeVideoBundle:Video','video')
->leftJoin('video.category','category')
->groupBy('category.id')
->having('COUNT(video.id) > 1000')
->orderBy('category.name','ASC')
->getQuery();
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|