Symfony 2多对多sql转换为dql

Symfony 2多对多sql转换为dql,sql,symfony,doctrine,dql,Sql,Symfony,Doctrine,Dql,我在映射以前从未遇到过的多对多关系时遇到问题。我有两个实体文档,即exam和relationmany-to-many-document2exam $em = $this->getEntityManager(); $query = $em->createQuery( "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex FROM UcictDataBun

我在映射以前从未遇到过的多对多关系时遇到问题。我有两个实体文档,即exam和relationmany-to-many-document2exam

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
资料:

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
Entity/Document.php, 类文档{

private $id;
private $entryNumber;
private $isPaymentFree;
private $profile;
private $dateCreated;
private $dateModified;
private $exams;
private $invoice;
$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
}

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
Entity/Exam.php

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
课堂考试{

private $name;
private $examCode;
private $dateTime;
private $startOnlineRegDate;
private $endOnlineRegDate;
private $endChangeDate;
private $session;
private $link;
private $documents;
private $isWriting;
private $examService;
$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
}

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
参考资料/Document.orm.xml

    <many-to-many field="exams" inversed-by="documents" target-entity="\Entity\Exam">
        <join-table name="document2exam">
            <join-columns>
                <join-column name="document_id" referenced-column-name="id" nullable="false" on-update="CASCADE" on-delete="CASCADE" />
            </join-columns>
            <inverse-join-columns>
                <join-column name="exam_id" referenced-column-name="id" nullable="false" on-update="CASCADE" on-delete="CASCADE" />
            </inverse-join-columns>
        </join-table>
        <cascade>
            <cascade-all />
        </cascade>
    </many-to-many>
$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;
由于document2exam表,我无法编写dql查询

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;

谢谢,我的语言也很抱歉:

我找到了我问题的答案

$em = $this->getEntityManager();

        $query = $em->createQuery(
            "SELECT en.entryNumber as enNum, IDENTITY(en.exam) as ex
                FROM UcictDataBundle:ExamNotes en 
                WHERE en.exam = :exam 
                    AND en.entryNumber NOT IN (
                        SELECT d.entryNumber
                        FROM UcictStudentBundle:Document d
                            INNER JOIN d.exams e
                        WHERE e.id = :exam 
                            AND d.entryNumber is not null                   
                    )
                ORDER BY en.entryNumber ASC");

        $ret = $query
               ->setParameter('exam', $exam)
               ->getResult();
        return $ret;

分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!也看到