如何使用条令中的“关系字段”列按关系字段对记录进行排序


How to sort records by relation field using relation fields column in Doctrine?

我有两个实体与ManyToOne有关。ScheduledEvent和Tariff实体。

第一个实体是ScheduledEvent,具有字段资费,其中资费是ManyToOne关系。我在ScheduledEvent实体中这样配置它:

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

具有"name"answers"scheduledEvents"字段的Tariff实体设置如下:

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

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

是否可以用annotaion或其他方式配置ScheduledEvent实体,以便在从ScheduledEvent中选择记录时,按Tariffs名称列排序。

例如,当我构建这样的查询时:

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

我希望能够告诉他只按关税排序,但当我按关税排序ScheduledEvent记录时,将其配置为按关税的名称列而不是id排序。

这可能吗?

我知道OrderBy注释在哪里:

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

但这仅用于ManyToMany和OneToMany关系。

那么,在检索实体的记录时,如何使用关系字段列按关系字段排序,有什么想法吗?

我使用的是2.4.6原则。

如果您先加入tariff,就可以做到这一点:

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