因此,我们假设我们使用User
和Ticket
类。它们是正常的实体,没什么特别的。
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
类有一些其他字段,例如updated
,DateTime
字段或status
是整数。我想按status DESC
和updated DESC
我知道我可以在findTicketsByUserOrderedByFooBar($user)
这样的存储库中创建一个函数,但我想知道是否有更好的方法。
答案 0 :(得分:4)
如果您总是希望自己的门票符合该顺序,则可以在关联中设置并orderBy
。
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
* @ORM\OrderBy({"status" = "DESC", "updated" = "DESC"})
**/
private $tickets;
答案 1 :(得分:1)
您可以向用户实体添加帮助方法,并使用doctrine2 criteria在ArrayCollection
上直接排序/过滤。像这样:
/**
* 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)
以您建议的方式创建函数将是建议的方法。