加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

php – 如安在没有副黄?的环境下行使两个实体之间的QueryBuild

发布时间:2021-03-14 20:21:44 所属栏目:编程 来源:网络整理
导读:我有一个与实体种别相干的实体视频,我必要行使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

我有一个与实体种别相干的实体视频,我必要行使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();

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读