这个问题一直困扰着我。
我试图用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/

10-11 03:12