3

私は何時間もネットを検索していますが、次の(縮小された)問題の解決策が見つかりません。

私の Symfony2 プロジェクトには 2 つのエンティティがあります。

/**
 * @ORM\Entity(repositoryClass="myBundle\Entity\AppuserRepository")
 * @ORM\Table(name="appuser")
 */
class Appuser implements UserInterface {
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id = "";

    /**
     * @ORM\OneToMany(targetEntity="Watched", mappedBy="appuserReference")
     */
    protected $watches;

    // ________________________________________________________________________

    public function __construct() {
        $this->watches = new \Doctrine\Common\Collections\ArrayCollection();
    }

}
/**
 * @ORM\Entity
 * @ORM\Table(name="watched")
 */
class Watched extends WatchedAbstract {
    /**
     * @ORM\ManyToOne(targetEntity="Appuser", inversedBy="watches")
     * @ORM\JoinColumn(name="appuserReference_id", referencedColumnName="id")
     */
    protected $appuserReference;
}

queryBuilder または createQuery を使用して、いくつかの Watched-Entities (つまり、ID が 1、3、および 12 のもの ;-)) によって参照されるすべてのユーザーを取得するにはどうすればよいですか?

これは、MySql で正しく実行され、DQL に「変換」できない SQL です。

SELECT * FROM appuser WHERE id IN (
    SELECT w.appuserReference_id 
        FROM watched w WHERE w.id IN (1, 3, 12));

Appuser-Entity には「watches」に関連する列がないため、他の方向に参加することができました。内部選択を行うために「appuserReference_id」または「appuserReference」を使用できません。

あなたが私を理解してくれることを願っています、thx!

4

2 に答える 2

3

エンティティは関連しているためJOIN、複数の の代わりに使用する必要がありますSELECT

$repository = $this->getDoctrine()->getRepository('jwatchBundle:Appuser');

$query = $repository->createQueryBuilder('u')
                    ->join('u.watches', 'w')
                    ->where('w.id IN :watched_ids')
                    ->setParameter('watched_ids', array(1, 3, 12))
                    ->getQuery();

$result = $query->getResult();   
于 2013-03-19T13:47:04.530 に答える
0

私の知るSELECT限り、Doctrine では Sub- は不可能です。

しかし、私が理解したとき、あなたはこのようなことを修正することができます:

$query = $this->createQueryBuilder('a')
    ->where('a.watches in (1, 3, 12)')
    ->getQuery();

目標を達成できなかった場合はお知らせください。

于 2013-03-19T13:44:56.577 に答える