0

私は、各ユーザーエンティティが多くの投稿エンティティを持つ1対多の関係を持つDoctrineを使用しています。だから私はそのような教義の質問をしています

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

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

そうすれば、ユーザーの投稿をそのように取得できます

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

   //a bunch of posts related to this user
   $posts = $user->getPosts();
}

便宜上、クエリを追加せずに、列の値に基づいてこの$postsオブジェクトから特定の投稿を取得できるようにするAPIを作成したいと思います。たとえば、post_slugという名前の列があるので、次のように言いたいと思います。

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

//or something along those lines...

これは$postsオブジェクトまたはPostエンティティクラスで実行できるものですか?

4

3 に答える 3

5

Doctrineのコレクションはフィルタリング可能です。したがって、Postエンティティがに保存されていると仮定してUser::$posts、これをユーザーエンティティで行います。

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

その後、あなたはただすることができます

$posts = $user->getPostsBySlug( 'my_slug' );
于 2012-07-12T15:05:29.530 に答える
0

やってみませんか

$slug = 'my_slug';
array_filter($user->getPosts()->all(), function ($post) use ($slug) {
    return $post->getSlug() == $slug;
})
于 2012-07-12T14:26:46.767 に答える
0

この種の機能をリポジトリクラスに移動できます(EntityRepositoryを拡張します)。

例えば:

namespace Acme\ThingBundle\Repository;

use Doctrine\ORM\EntityRepository;

class PostRepository extends EntityRepository
{
    public function getBySlug($slug)
    {
        /// your custom query here

        return $q->getQuery()->getResult();
    }
}
于 2012-07-12T14:34:17.187 に答える