这个问题一直困扰着我。
我试图用symfony中的dql加入几个表,但它一直抛出一个异常,说:
“方法”排名“对象”AppBaseStase\\“关键字不存在于第37行的App/Realth/Dejx.HTML.Tigg”
这是我的DQL:
$query = $em->createQuery(
'SELECT e,k,r
FROM AppBundle:Keyword k
JOIN k.company c
LEFT JOIN k.entry e
LEFT JOIN e.rankings r
WHERE c.user = :id
ORDER BY k.name ASC'
)->setParameter('id',$user_id);
$keywords = $query->getResult();
我想我知道问题是什么,但我不知道如何解决。
我的关键字实体如下所示:
AppBundle\Entity\Keyword:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
name:
type: string
length: 255
manyToOne:
company:
targetEntity: AppBundle\Entity\Company
oneToMany:
entry:
targetEntity: AppBundle\Entity\Entry
mappedBy: keyword
lifecycleCallbacks: { }
请注意,排名实体和关键字实体之间没有直接联接关系-该关系位于关键字实体和排名实体之间的链接entry实体中:
AppBundle\Entity\Entry:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
path:
type: string
length: 255
manyToOne:
keyword:
targetEntity: AppBundle\Entity\Keyword
oneToMany:
rankings:
targetEntity: AppBundle\Entity\Ranking
mappedBy: entry
lifecycleCallbacks: { }
以下是排名实体:
AppBundle\Entity\Ranking:
type: entity
table: null
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
position:
type: integer
visits:
type: integer
nullable: TRUE
bounces:
type: integer
nullable: TRUE
date:
type: datetime
manyToOne:
entry:
targetEntity: AppBundle\Entity\Entry
lifecycleCallbacks: { }
我很感激你的帮助!:)
编辑
好的,如果我把上面写的dql传递给twig模板:
如果是人与人之间的关系,我如何检索排名?
如果我这样做:
{% for ranking in keyword.entry.rankings %}
<td>{{ ranking.id }}</td>
{% endfor %}
它给出了对象“Realths'”,对象“Orthist\Orm持久集合”不存在于第37行的App/Realth/Dejx.HTML.Tigg中。
最佳答案
修改你的树枝,我在这里给你看
{% for entry in keyword.entry %}
{% for ranking in entry.rankings %}
<td>{{ ranking.id }}</td>
{% endfor %}
{% endfor %}
因为条目不是单个实体而是实体的集合
您还写入了实体映射文件
AppBundle\Entity\Keyword:
[...]
oneToMany:
entry:
targetEntity: AppBundle\Entity\Entry
mappedBy: keyword
因此,即使您的查询只会对关系中的一条记录进行水合处理,结果也将是一个集合(在本例中是某种集合)。
关于php - 学说在symfony中找不到方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31165863/