如何使用 3 个表执行 JOIN 查询,按 ID 计数排序



>我有 3 个表: 事件,事件肖恩斯,公司。我需要返回公司,并按计数订购 该公司的事件活动实体:

 /**
 * @ORMOneToMany(
 *     targetEntity="EventSeans",
 *     cascade={"persist", "remove", "merge"},
 *    mappedBy="event"
 *  )
 *  @ORMOrderBy({"start_time"= "ASC"})
 */
protected $seanses;

事件肖恩斯实体:

 /**
 * @ORMManyToOne(
 *      targetEntity="ApplicationGidBundleEntityFirm")
 */
protected $place;
 /**
 * @ORMManyToOne(
 *      targetEntity="Event",
 *      inversedBy="seanses"
 * )* 
 */
protected $event;

我试过这个:

        $qb
        ->select('f, count(e.id) cnt')
        ->from('AfishaBundle:Event', 'e')
        ->from('GidBundle:Firm', 'f')
        ->leftJoin('e.seanses', 's')
        ->where('s.place = f.id')
        ->orderBy('cnt','ASC')
        ->setMaxResults(3)
    ;

编辑我在公司实体中添加关系

    /**
 * @ORMOneToMany(
 *     targetEntity="ApplicationAfishaBundleEntityEventSeans",
 *     cascade={"persist", "remove", "merge"},
 *    mappedBy="place"
 *  )
 *  @ORMOrderBy({"start_time"= "ASC"})
 */
protected $seanses;

我的查询是

        $qb
        ->select('f, count(e.id) cnt')
        ->from('GidBundle:Firm', 'f')
        ->leftJoin('f.seanses','s')
        ->leftJoin('s.event', 'e')
        ->orderBy('cnt', 'DESC')
        ->groupBy('f.id')
        ->setMaxResults(20)
    ;

但是cnt - 是我的西恩斯的计数...没有任何变化:(

CREATE TABLE IF NOT EXISTS `afisha_event_seanses` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `place_id` int(11) DEFAULT NULL,
  `event_id` int(11) DEFAULT NULL,
  `start_time` datetime NOT NULL,
  `allday` tinyint(1) NOT NULL,
  `cost` int(11) NOT NULL,
  `hall` varchar(255) NOT NULL,
  `region` varchar(255) NOT NULL,
  `end_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_3164A4B7DA6A219` (`place_id`),
  KEY `IDX_3164A4B771F7E88B` (`event_id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
 ALTER TABLE `afisha_event_seanses`
  ADD CONSTRAINT `FK_3164A4B771F7E88B` FOREIGN KEY (`event_id`) REFERENCES `afisha_events` (`id`),
   ADD CONSTRAINT `FK_3164A4B7DA6A219` FOREIGN KEY (`place_id`) REFERENCES `gid_firms` (`id`);

如果我想你的实体关系定义得很好。

以下代码应返回具有与每个公司相关的事件计数的公司。

在您的 FirmRepository 中添加一个方法,其中包含,

       $query = $this->createQueryBuilder('f')
           ->select(' f, count(distinct e.id)')
           ->leftJoin('f.seanses', 's')
           ->leftJoin('s.event', 'e')
           ->groupBy('f.id')
           ->getQuery()
           ->getArrayResult();

其中event定义从EventSeans实体到Event实体的多对一关系,如下所示,

/**
 * @ORMManyToOne(targetEntity="ApplicationGidBundleEntityEvent")
 */
protected $event;

相关内容

  • 没有找到相关文章

最新更新