Symfony实体 - 订单在ManyToMany连接中加入实体

时间:2015-01-19 12:54:39

标签: php mysql symfony join doctrine-orm

因此,我们假设我们使用UserTicket类。它们是正常的实体,没什么特别的。

User类包含以下行:

/**
 * @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
 **/
private $tickets;

Ticket类包含:

/**
 * @ORM\ManyToMany(targetEntity="User", inversedBy="tickets")
 * @ORM\JoinTable(name="users_to_tickets")
 **/
private $collaborateurs;

要获得用户拥有的所有票证,我只需调用Symfony创建的getTickets()函数即可。至于好。 Ticket类有一些其他字段,例如updatedDateTime字段或status是整数。我想按status DESCupdated DESC

对这些门票进行排序

我知道我可以在findTicketsByUserOrderedByFooBar($user)这样的存储库中创建一个函数,但我想知道是否有更好的方法。

3 个答案:

答案 0 :(得分:4)

如果您总是希望自己的门票符合该顺序,则可以在关联中设置并orderBy

/**
 * @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
 * @ORM\OrderBy({"status" = "DESC", "updated" = "DESC"})
 **/
private $tickets;

答案 1 :(得分:1)

您可以向用户实体添加帮助方法,并使用doctrine2 criteriaArrayCollection上直接排序/过滤。像这样:

/**
* this return a ArrayCollection
*/
public function getTicketsByUserOrderedByFooBar()
{
            $criteria = Criteria::create()
                        ->orderBy(array('foo'=>'DESC','bar' =>'ASC'))

        return $this->tickets->matching($criteria);

}


/**
* this return a ArrayCollection
*/
public function getTicketsByUserOrderedBytitle()
{
            $criteria = Criteria::create()
                        ->orderBy(array('title'=>'DESC'))

        return $this->tickets->matching($criteria);

}

另见this

希望得到这个帮助。

答案 2 :(得分:0)

以您建议的方式创建函数将是建议的方法。