我有3张桌子: 活动,EventSeans,Firms 。 我需要退回公司,并在本公司按计数事件订购 事件实体:
/**
* @ORM\OneToMany(
* targetEntity="EventSeans",
* cascade={"persist", "remove", "merge"},
* mappedBy="event"
* )
* @ORM\OrderBy({"start_time"= "ASC"})
*/
protected $seanses;
EventSeans实体:
/**
* @ORM\ManyToOne(
* targetEntity="Application\GidBundle\Entity\Firm")
*/
protected $place;
/**
* @ORM\ManyToOne(
* 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)
;
修改 我在公司实体中添加关系
/**
* @ORM\OneToMany(
* targetEntity="Application\AfishaBundle\Entity\EventSeans",
* cascade={"persist", "remove", "merge"},
* mappedBy="place"
* )
* @ORM\OrderBy({"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`);
答案 0 :(得分:1)
如果我认为你的实体关系定义得很好。
以下代码应返回与每家公司相关的事件数量的公司。
在 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
实体的多对一关系,如下所示
/**
* @ORM\ManyToOne(targetEntity="Application\GidBundle\Entity\Event")
*/
protected $event;