我有两个实体与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);