您好我正在尝试通过多个字段订购doctrine集合
试过这样的事
/**
* @var Collection
* @ORM\OrderBy({"date" = "ASC","TimeBegin" = "ASC"})
* @ORM\OneToMany(targetEntity="Schedule", mappedBy="event")
*/
protected $schedules;
此代码无效
日期字段的格式为“1927-12-01”timeBegin“00:13:01”
这是我的查询
public function getAppointmentDetails(int $eventId): ?Event
{
$eventAlias = 'event';
/** @var EventQueryBuilder $queryBuilder */
$queryBuilder = $this->createQueryBuilder($eventAlias);
$queryBuilder->select($eventAlias)
->whereEventId($eventId)
->withRoom()
->withService()
->withSchedulesAndInstructorsOrderedByDateAndTime();
$appointmentDetails = $queryBuilder->getQuery()->getOneOrNullResult();
return $appointmentDetails;
}
和我的方法withSchedulesAndInstructorsOrderedByDateAndTime
/**
* With Schedules And Instructors Ordered by Date and Time
* @return EventQueryBuilder
*/
public function withSchedulesAndInstructorsOrderedByDateAndTime() : EventQueryBuilder
{
$this->join($this->getRootAliases()[0] . '.schedules', 'sc');
$this->join('sc' . '.instructors', 'in');
return $this;
}
事情就是如果我添加orderBy我的教师集合将是空的
正如文件所述:
为了保持较低的数据库影响,如果在DQL查询中对集合进行fetch加入,则这些隐式ORDER BY项仅添加到DQL查询中。
因此,您需要通过向您的选择添加计划来执行获取连接:
/**
* With Schedules And Instructors Ordered by Date and Time
* @return EventQueryBuilder
*/
public function withSchedulesAndInstructorsOrderedByDateAndTime() : EventQueryBuilder
{
$this->addSelect('sc');
$this->join($this->getRootAliases()[0] . '.schedules', 'sc');
$this->join('sc' . '.instructors', 'in');
return $this;
}