如何在具有多对多关系的实体存储库中创建查询?空查询

How to create a query in the entity repository with a many-to-many relationship? Empty query

我在广告和文档之间建立了多对多关系:这是 3 个表:

广告
文档
document_advert。

如何从广告中获取 author 并从文档中获取 path? 第一次尝试没有抛出任何错误,但查询似乎是空的,我无法从调试器中理解这一点:

[![在此处输入图片描述][1]][1]

[![在此处输入图片描述][2]][2]

我的目标是 sql:

SELECT d.path, a.author 
FROM document_advert da 
JOIN document d 
JOIN advert a 
WHERE da.advert_id = 1 
AND da.document_id = d.id

我的尝试(我在 AdvertRepository 中):

public function getDocNames($id){
     $em = $this->getEntityManager();

    $query = $this->createQueryBuilder('a')
            ->join('a.document', 'd')
            ->addSelect('d')
            ->where("a.id = :id")
            ->setParameter('id', $id)
            ->getQuery()
    ;
    return $query->getResult();
    //issue: empty query

}

编辑:我试图从 d 获取所有值,而不是显式调用它们(我不想 d.path, d.name, etc. 而是 d)。但是,如果我不在查询中添加 "d.path",则无法识别 twig 文件中的“.path”。

在树枝上:

{% for doc in docNames %}
    {{ doc.path }}
{% endfor %}

如果我在查询中删除 .path,“.path”"does not exist ":这里是 DQL 格式的查询:

public function getDocNamesC($id){
        $query = $this->_em->createQuery("SELECT a, d.path FROM OCPlatformBundle:Advert a JOIN a.documents d WHERE a.id = $id");
        return $query->getResult();
    }

不确定为什么定义了 $em 变量但没有使用它。我假设您正在尝试执行以下操作。

public function getDocNames($id){
    $qb = $this->getEntityManager()->createQueryBuilder();

    return $qb->select('a.author')
        ->addSelect('d.path')
        ->from('OCPlatformBundle:Advert', 'a')
        ->join('a.documents', 'd')
        ->where(
            $qb->expr()->eq('a.id', ':id')
        )
        ->setParameter('id', $id)
        ->getQuery()
        ->getResult();
}

如果你想获得完整的实体

public function getDocNames($id){
    $qb = $this->getEntityManager()->createQueryBuilder();

    return $qb->select('a')
        ->addSelect('d')
        ->from('OCPlatformBundle:Advert', 'a')
        ->join('a.documents', 'd')
        ->where(
            $qb->expr()->eq('a.id', ':id')
        )
        ->setParameter('id', $id)
        ->getQuery()
        ->getResult();
}

然后在 Twig 中访问结果时[​​=17=]

{% for advert in docNames %}
    {{ advert.name }}

    {% for document in advert.documents %}
       {{ document.path }}
    {% endfor %}
{% endfor %}

我们需要遍历文档,因为它是一种 many-to-many 关系,所以 path 每个 advert.

都没有