0

Doctrine2 QueryBuilder を使用してクエリを作成しようとしています。

    $qb = $this->getObjectManager()->createQueryBuilder();
    $qb->select( array('n', 't', 'c') )
        ->from('Application\Entity\Notification', 'n')
        ->leftJoin('n.notificationType', 't')
        ->leftJoin('n.course', 'c')
        ->leftJoin('c.studyCourses', 's');

エンティティ Course の関連コードは次のようになります。

    /**
     * @ORM\OneToMany(targetEntity="StudyCourses", mappedBy="Course", cascade={"all"})
     */
    protected $studyCourses;

エンティティ StudyCourse の関連コードは次のようになります。

    /**
     * @ORM\ManyToOne(targetEntity="Course", inversedBy="studyCourses")
     * @ORM\JoinColumn(name="Course", referencedColumnName="Id", nullable=true)
     */
    protected $course;  

ここで、クエリを実行しようとすると、'' の近くでセマンティック エラーが発生します。Doctrine によって作成された SQL を印刷すると、このエラーに関するより良い情報が得られると思いましたが、実際には次のようになっています。

SELECT n0_.Id AS Id0, n0_.Timestamp AS Timestamp1, n0_.TitleHtml AS TitleHtml2, n0_.ContentHtml AS ContentHtml3, n1_.Id AS Id4, n1_.Created AS Created5, n1_.Updated AS Updated6, n1_.Name AS Name7, c2_.Id AS Id8, c2_.Created AS Created9, c2_.Updated AS Updated10, c2_.Name AS Name11, c2_.Description AS Description12, c2_.Code AS Code13, c2_.ObjectId AS ObjectId14, c2_.IsActive AS IsActive15, n0_.NotificationType AS NotificationType16, n0_.User AS User17, n0_.Department AS Department18, n0_.Study AS Study19, n0_.Course AS Course20, n0_.Category AS Category21, c2_.Language AS Language22 FROM Notification n0_ LEFT JOIN NotificationType n1_ ON n0_.NotificationType = n1_.Id LEFT JOIN Course c2_ ON n0_.Course = c2_.Id LEFT JOIN 

LEFT JOIN の後で停止します。

私が間違っていること、またはこの問題を解決する方法が本当にわからないので、どんな助けもいただければ幸いです。同様のエラーをインターネットで検索しましたが、今のところ運がありません。

4

1 に答える 1

0

少なくとも、select 配列内の studyCourses テーブルで leftJoin を形成するために必要な列を選択してみてください。まず、「select( array('n', 't', 'c', 's') )」などのすべてを取得してみてください。列を選択していないと、壊れることがあります。これが機能する場合は、studyCourses テーブル内にあるすべての列を取得するのではなく、「s.id」などの leftJoin を形成するために select で関連する列を取得します。

お役に立てれば。

乾杯!

于 2014-05-30T11:47:34.810 に答える