假设我们使用User
和Ticket
类。它们是正常的实体,没有什么花哨的。
User 类包含以下行:
/**
* @ORMManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
**/
private $tickets;
Ticket 类包含以下内容:
/**
* @ORMManyToMany(targetEntity="User", inversedBy="tickets")
* @ORMJoinTable(name="users_to_tickets")
**/
private $collaborateurs;
要获取用户拥有的所有票证,我可以调用Symfony创建的getTickets()
函数。就好。Ticket
类有一些附加字段,例如updated
是DateTime
字段或status
是整数。我想按status DESC
和updated DESC
对这些票进行排序
我知道我可以像findTicketsByUserOrderedByFooBar($user)
一样在存储库中创建一个函数,但我想知道是否有更好的方法。
如果您总是希望您的门票按该顺序排列,您可以设置和orderBy
关联。
/**
* @ORMManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
* @ORMOrderBy({"status" = "DESC", "updated" = "DESC"})
**/
private $tickets;
您可以将帮助程序方法添加到您的用户实体,并使用 doctrine2 条件直接对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);
}
另请参阅此
希望这有帮助。
按照您建议的方式创建函数将是建议的方法。