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

php – DQL很多很多都很重要

发布时间:2020-12-13 17:57:21 所属栏目:PHP教程 来源:网络整理
导读:我正在使用带有Doctrine的Symfony 2,并且我有两个实体加入了多对多的关联. 假设我有两个实体:User和Group,db上的相关表是users,groups和users_groups. 我想在DQL中获得前十大人口最多的组,但我不知道在连接表(users_groups)上执行查询的语法.我已经查看了Do
我正在使用带有Doctrine的Symfony 2,并且我有两个实体加入了多对多的关联.
假设我有两个实体:User和Group,db上的相关表是users,groups和users_groups.

我想在DQL中获得前十大人口最多的组,但我不知道在连接表(users_groups)上执行查询的语法.我已经查看了Doctrine手册,但我没有找到解决方案,我想我还有很多需要了解的DQL.

在普通的SQL中,它将是:

select distinct group_id,count(*) as cnt from users_groups group by group_id order by cnt desc limit 10

能帮我把它翻译成DQL吗?

更新(课程):

/**
 * EntityE_User
 *
 * @ORMTable(name="users")
 * @ORMEntity
 */
class E_User
{
    /**
     * @ORMManyToMany(targetEntity="E_Group",cascade={"persist"})
     * @ORMJoinTable(name="users_groups",*      joinColumns={@ORMJoinColumn(name="user_id",referencedColumnName="id",onDelete="cascade")},*      inverseJoinColumns={@ORMJoinColumn(name="group_id",onDelete="cascade")}
     * )
     */

    protected $groups;

    /**
     * @var integer $id
     *
     * @ORMColumn(name="id",type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORMColumn(name="name",type="string",length=255)
     */
    private $name;

    /* ... other attributes & getters and setters ...*/
}


/**
 * EntityE_Group
 *
 * @ORMTable(name="groups")
 * @ORMEntity
 */
class E_Group
{
    /**
     * @var integer $id
     *
     * @ORMColumn(name="id",type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORMColumn(name="text",length=255)
     */
    private $name;

    /* ... other attributes & getters and setters ...*/
}
如果没有看到实际的类,这并不容易,但通过猜测你有一个多对多的双向关系:
$dql = "SELECT g.id,count(u.id) as cnt FROM EntityGroup g " .
    "JOIN g.users u GROUP BY g.id ORDER BY cnt DESC LIMIT 10;";
$query = $em->createQuery($dql);
$popularGroups = $query->getArrayResult();

更新:

您不必使用双向关系,您可以相反地查询:

$dql = "SELECT g.id,count(u.id) as cnt FROM EntityUser u " .
    "JOIN u.groups g GROUP BY g.id ORDER BY cnt DESC LIMIT 10;";

(编辑:李大同)

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

    推荐文章
      热点阅读