Doctrine Order OneToMany系列

问题描述 投票:0回答:1

您好我正在尝试通过多个字段订购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我的教师集合将是空的

symfony doctrine
1个回答
0
投票

正如文件所述:

为了保持较低的数据库影响,如果在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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.