Symfony 错误:类…\Entity\。。没有名为的关联

Symfony 错误:类…\Entity\。。没有名为的关联,symfony,doctrine-orm,yaml,one-to-many,Symfony,Doctrine Orm,Yaml,One To Many,这个问题与我的另一个问题有关: 我想出了双向关联来解决我的老问题,但现在我有另一个问题 模式[已编辑]: XYZ\Bundle\CitiesBundle\Entity\Cities: type: entity table: cities fields: id: id: true type: integer unsigned: false nullable: false generator: str

这个问题与我的另一个问题有关:

我想出了双向关联来解决我的老问题,但现在我有另一个问题

模式[已编辑]

  XYZ\Bundle\CitiesBundle\Entity\Cities:
  type: entity
  table: cities
  fields:
    id:
      id: true
      type: integer
      unsigned: false
      nullable: false
      generator:
        strategy: IDENTITY
    name:
      type: string
      length: 50
      fixed: false
      nullable: false
    landarea:
      type: decimal
      nullable: false
    density:
      type: integer
      unsigned: false
      nullable: false
    population:
      type: integer
      unsigned: false
      nullable: false
  manyToOne:
    state:
      targetEntity: States
      cascade: {  }
      inversedBy: cities
      joinColumn:
        state_id:
          referencedColumnName: id
  lifecycleCallbacks: {  }
实体:

class Cities
{
    //other vars

    /**
     * @var XYZ\Bundle\CitiesBundle\Entity\States
     */
    private $state;

    //other get/set    

    /**
     * Set state
     *
     * @param XYZ\Bundle\CitiesBundle\Entity\States $state
     */
    public function setState(\XYZ\Bundle\CitiesBundle\Entity\States $state)
    {
        $this->state = $state;
    }

    /**
     * Get state
     *
     * @return XYZ\Bundle\CitiesBundle\Entity\States 
     */
    public function getState()
    {
        return $this->state;
    }
}

class States
{
    //other vars and get/set

    private $cities;

    public function __construct()
    {
        $this->cities = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add cities
     *
     * @param XYZ\Bundle\CitiesBundle\Entity\Cities $cities
     */
    public function addCities(\XYZ\Bundle\CitiesBundle\Entity\Cities $cities)
    {
        $this->cities[] = $cities;
    }

    /**
     * Get cities
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getCities()
    {
        return $this->cities;
    }
}
QueryBuilder用法:

    $query = $em->createQueryBuilder()
                ->select('c','s')
                ->from('CitiesBundle:Cities', 'c')
                ->innerJoin('c.state', 's')
                ->orderBy('c.population', 'DESC')
                ->setMaxResults(10)
                ->getQuery();  
错误是:

[语义错误]第0行第58列靠近“c.population的顺序”: 错误:类XYZ\Bundle\CitiesBundle\Entity\Cities没有关联 命名国家

生成的DQL:

从CitiesBundle中选择c,s:城市c内部连接c.状态s订单依据 c、 人口描述

羞耻:(

有人能帮我解决我的问题吗

[编辑]

我编辑了城市模式,现在错误是:

注意:未定义索引:中的名称 /home/marek/devel/sf2/cities/vendor/doctor/lib/doctor/ORM/Mapping/Driver/YamlDriver.php 第473行


我确信
joinColumns:
(注意复数)只用于
多对多关系中。在其他关系中,您应该使用
joinColumn

在Cities XML中,尝试放置:

joinColumn:
    name: state_id
    referencedColumnName: id
除此之外,请尝试在XML中将“ManyToOne”重命名为“ManyToOne”,但我怀疑这是问题所在


希望这对…有所帮助。

请注意,当使用Symfony时,它将首先查看映射YAML文件,而忽略您的实体注释。在加载YAML映射文件的过程中,我花了很长时间更改注释。

谢谢。我按照您的建议做了。我编辑了我的问题以添加完整的城市模式和新错误。嗯,它说它丢失了ng选项名为
name
。您是否完全按照我在上面的答案中所写的那样进行了尝试?也就是说,您确实用上面的xml代码片段替换了“
state\u id:referencedColumnName:id
”?我在YAML中有所有配置。我将其全部放在了co Cities.orm.ymlSorry中,我的意思是YAML而不是xml:)谢谢,现在它可以工作了,但我在相关问题中遇到了相同的问题:/我遇到了这个问题,我更改了实体文件,但没有更改YAML文件(在
doctor
文件夹中隐藏了多个实体文件)。编辑了YAML文件并解决了错误。