Symfony2和Doctrine:如何按依赖实体字段对实体集合进行排序

时间:2014-10-23 12:46:50

标签: php symfony doctrine-orm doctrine

在我的sf2项目中,我通过调用

来访问实体集合
$user_payment_info_datas = $user->getUserPaymentInfoDatas();

在用户实体中有:

/**
 * @ORM\OneToMany(targetEntity="UserPaymentInfoData", mappedBy="user")
 * @ORM\OrderBy({"payment_info" = "ASC", "payment_info_data" = "ASC"})
 */
private $user_payment_info_datas;

所以它是1:n关系,用户有很多UserPaymentInfoData。但是,还有另一个名为PaymentInfoData的实体,它包含UserPaymentInfoData的实际值。关系是

User -> UserPaymentInfoData -> PaymentInfoData.

因此,就UserPaymentInfoData中的注释而言,它是:

/**
 * @ORM\ManyToOne(targetEntity="PaymentInfoData", inversedBy="user_payment_info_datas")
 * @ORM\JoinColumn(name="payment_info_id", referencedColumnName="id")
 * @ORM\OrderBy({"title"="ASC"})
 */
private $payment_info_data;

我需要对

返回的集合进行排序
$user_payment_info_datas = $user->getUserPaymentInfoDatas();

通过PaymentInfoData(我们称之为'title')而不是UserPaymentInfoData中的字段进行升序。

我可以使用Doctrine注释做到这一点吗?或者没有编写DQL?

我知道我可以用:

    $user_payment_info_datas = $em->getRepository('STMainBundle:UserPaymentInfoData')
        ->createQueryBuilder('upid')
        ->innerJoin ('upid.payment_info_data', 'pid')
        ->where('upid.user = :user')
        ->addOrderBy('upid.payment_info', 'ASC')
        ->addOrderBy('pid.title', 'ASC')
        ->setParameter('user', $user)
        ->getQuery()
        ->getResult();

但问题是,是否可以只使用注释,因为我需要在几个地方修复它,只是更改注释而不是在两个地方创建查询构建器会很方便。

0 个答案:

没有答案