0
My\SampleBundle\Entity\Subject:

    // ...

    manyToOne:
        author:
            targetEntity: My\UserBundle\Entity\User
            joinColumn:
                name: owner
                referencedColumnName: id

科目に関連するユーザが取得できます。

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT s, a
                  FROM MySampleBundle:Subject s
                  LEFT JOIN s.author a
                  WHERE s.author = :author
                  GROUP BY s.title'
              )
              ->setParameter("author", $author);

逆に、ユーザー情報から件名を取得するにはどうすればよいでしょうか。

たとえば、ユーザー リスト ページのクエリです。

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u
                  FROM MyUserBundle:User u
                  GROUP BY u.username'
              );

この際、関連する科目のデータも取得したいと考えています。

FOSUserBundle を使用しています。
My\UserBundle\Entity を修正するだけの問題ですか?
それともオーム設定の段階から間違っているのでしょうか?

4

1 に答える 1

0

私が修正した手順。

STEP:1 My\UserBundle\Entity\User に追加

/**
 * @ORM\OneToMany(targetEntity="My\SampleBundle\Entity\Subject", mappedBy="author")
 */
private $subjects;

/**
 * Get subjects
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getSubjects()
{
    return $this->subjects;
}

STEP:2 'inversedBy' を追加

My\SampleBundle\Entity\Subject:
    type: entity

    // ...

    manyToOne:
        author:
            targetEntity: My\UserBundle\Entity\User
            inversedBy: subjects
            joinColumn:
                name: owner
                referencedColumnName: id

STEP:3 クエリ

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u, s
                  FROM MyUserBundle:User u
                  LEFT JOIN u.subjects s
                  ORDER BY u.username'
              );

簡単なデータを取得しました。しかし、それは完璧な解決策ではありませんでした。

ジョインテーブルが増えると応答しなくなり、ずっとロード中の状態になります。
データが重すぎるとは限らないと思います。
問題はまだ理解されていません。

別の問題の例

$query = $this->getEntityManager()
              ->createQuery('
                  SELECT u, s, a, c, i
                  FROM MyUserBundle:User u
                  LEFT JOIN u.subjects s
                  LEFT JOIN u.articles a
                  LEFT JOIN u.comments c
                  LEFT JOIN u.images i
                  // etc...
                  // It will be in the state of loading all the time
                  // when join table increases.
                  ORDER BY u.username'
              );
于 2012-12-03T02:40:57.107 に答える