Doctrine - 根据列值从许多结果中获取行或行

Mik*_*ike 0 symfony doctrine-orm

我正在使用一对多关系的学说,其中每个用户实体都有许多帖子实体.所以我有一个像这样的学说查询

$em = $this->getDoctrine()->getManager();

$query = $em->createQuery(
   'SELECT u, p FROM MYUserBundle:User u
   JOIN u.post p'
);
Run Code Online (Sandbox Code Playgroud)

然后,我可以获得这样的用户帖子

foreach($query->getResult() as $user){

   //a bunch of posts related to this user
   $posts = $user->getPosts();
}
Run Code Online (Sandbox Code Playgroud)

为方便起见,我想创建一个API,允许我根据列值从这个$ posts对象中获取特定帖子或帖子,而不使用更多查询.所以例如我有一个名为post_slug的列,所以我想能够说

$posts = $user->getPosts();
$post = $posts->findBySlug('my_slug');

//or something along those lines...
Run Code Online (Sandbox Code Playgroud)

这可以通过$ posts对象或Post实体类完成吗?

Pet*_*ley 5

Doctrine的藏品是可过滤的.因此,假设存储了Post实体User::$posts,请在您的用户实体中执行此操作.

public function getPostsBySlug( $slug )
{
  return $this->posts->filter( function( Post $post ) use ( $slug )
  {
    return $post->getSlug() == $slug;
  } );
}
Run Code Online (Sandbox Code Playgroud)

然后就可以了

$posts = $user->getPostsBySlug( 'my_slug' );
Run Code Online (Sandbox Code Playgroud)