我在广告和文档之间有多对多的关系:这是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
)。但是" .path"如果我没有添加" d.path"则在树枝文件中无法识别在查询中。
在树枝上:
{% for doc in docNames %}
{{ doc.path }}
{% endfor %}
如果我在查询中删除.path
," .path" "不存在" :这是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();
}
答案 0 :(得分:2)
不确定为什么定义了$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中访问结果时
{% for advert in docNames %}
{{ advert.name }}
{% for document in advert.documents %}
{{ document.path }}
{% endfor %}
{% endfor %}
我们需要遍历文档,因为它是many-to-many
关系,因此每path
没有advert
个。