如何在具有多对多关系的实体存储库中创建查询?空查询
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
.
都没有
我在广告和文档之间建立了多对多关系:这是 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
.