Как отсортировать записи по полю отношений, используя столбец полей отношений в Doctrine?

0

У меня есть 2 объекта в отношении ManyToOne. ScheduledEvent и Tariff.

Первым лицом является ScheduledEvent с полевым тарифом, где тариф является отношением ManyToOne. И я сконфигурировал его так в объекте ScheduledEvent:

 /**
 *
 * @ORM\ManyToOne(targetEntity="Tariff", inversedBy="scheduledEvents")
 * @ORM\JoinColumn(name="tariff_id", referencedColumnName="id")
 **/
private $tariff;

И объект тарифа, который имеет поля "name" и "scheduleEvents", настроенные следующим образом:

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


/**
*
* @ORM\OneToMany(targetEntity="ScheduledEvent", mappedBy="tariff")
*/
private $scheduledEvents;

Возможно ли настроить объект ScheduledEvent в аннотации или каким-либо другим способом, чтобы при выборе записей из объекта ScheduledEvent я сортировал по столбцу "Название тарифа".

Так, например, когда я строю запрос следующим образом:

$repository = $em->getRepository('SMAPIBundle:ScheduledEvent');
$repository->createQueryBuilder('sce')
       ->setFirstResult(0)
       ->setMaxResults(10)
       ->orderBy('sce.tariff', $sortColumnOrder);

Я хочу, чтобы он мог рассказать ему только сортировать по тарифу, но настроить его сортировать по столбцу имени тарифа вместо id, когда я сортирую записи ScheduledEvent по тарифу.

Это возможно?

Я знаю, где Аннотации OrderBy:

/**
 *
 * @ORM\ManyToOne(targetEntity="Tariff", inversedBy="scheduledEvents")
 * @ORM\JoinColumn(name="tariff_id", referencedColumnName="id")
 * @ORM\OrderBy("name")
 **/
private $tariff;

Но это используется только для отношений ManyToMany и OneToMany.

Итак, любые идеи о том, как сортировать по полю отношения, используя столбцы полей отношений при извлечении записей для объекта?

Я использую Doctrine 2.4.6.

Теги:
sorting
doctrine2

1 ответ

1

Вы можете сделать это, если сначала присоединитесь к tariff:

$repository = $em->getRepository('SMAPIBundle:ScheduledEvent');
$repository->createQueryBuilder('sce')
       ->leftJoin('sce.tariff', 't')
       ->setFirstResult(0)
       ->setMaxResults(10)
       ->orderBy('t.name', $sortColumnOrder);
  • 0
    Я не могу этого сделать, потому что имя столбца сортировки является динамическим, и я не знаю, какой столбец будет отсортирован.
  • 0
    t.name является строкой. Сделайте это переменной.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню