Symfony 实体 - 在 ManyToMany 连接中订购连接实体
Symfony Entity - Order joined Entities in a ManyToMany join
假设我们使用 User
和 Ticket
class。他们是普通的实体,没什么特别的。
用户 class 包含以下行:
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
**/
private $tickets;
票证 class 包含以下内容:
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="tickets")
* @ORM\JoinTable(name="users_to_tickets")
**/
private $collaborateurs;
要获取用户拥有的所有门票,我只需调用 Symfony 创建的 getTickets()
函数即可。尽可能好。 Ticket
class 有一些额外的字段,例如 updated
是一个 DateTime
字段或 status
是一个整数。我想按 status DESC
和 updated DESC
对这些票进行排序
我知道我可以像 findTicketsByUserOrderedByFooBar($user)
那样在存储库中创建一个函数,但我想知道是否有更好的方法。
建议的方法是按照您建议的方式创建函数。
如果您始终希望您的门票按该顺序排列,您可以在关联中设置和orderBy
。
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
* @ORM\OrderBy({"status" = "DESC", "updated" = "DESC"})
**/
private $tickets;
您可以将 Helper 方法添加到您的用户实体,并 sort/filter 直接在 ArrayCollection
上使用 doctrine2 criteria。像这样:
/**
* 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);
}
另见
希望对您有所帮助。
假设我们使用 User
和 Ticket
class。他们是普通的实体,没什么特别的。
用户 class 包含以下行:
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
**/
private $tickets;
票证 class 包含以下内容:
/**
* @ORM\ManyToMany(targetEntity="User", inversedBy="tickets")
* @ORM\JoinTable(name="users_to_tickets")
**/
private $collaborateurs;
要获取用户拥有的所有门票,我只需调用 Symfony 创建的 getTickets()
函数即可。尽可能好。 Ticket
class 有一些额外的字段,例如 updated
是一个 DateTime
字段或 status
是一个整数。我想按 status DESC
和 updated DESC
我知道我可以像 findTicketsByUserOrderedByFooBar($user)
那样在存储库中创建一个函数,但我想知道是否有更好的方法。
建议的方法是按照您建议的方式创建函数。
如果您始终希望您的门票按该顺序排列,您可以在关联中设置和orderBy
。
/**
* @ORM\ManyToMany(targetEntity="Ticket", mappedBy="collaborateurs")
* @ORM\OrderBy({"status" = "DESC", "updated" = "DESC"})
**/
private $tickets;
您可以将 Helper 方法添加到您的用户实体,并 sort/filter 直接在 ArrayCollection
上使用 doctrine2 criteria。像这样:
/**
* 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);
}
另见
希望对您有所帮助。