错误:类... \Entity\ ..没有关联名称 [英] Error: Class ...\Entity\.. has no association named

查看:142
本文介绍了错误:类... \Entity\ ..没有关联名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题与我的另一个问题有关: Doctrine2给出我只是相关对象的第一个实例



我想出了双向关联来尝试解决我的旧问题,但现在我有另一个问题。 b
$ b

模式

  XYZ\Bundle \CitiesBundle\Entity\Cities:
类型:实体
表:cities
字段:
id:
id:true
类型:整数
unsigned:false
可空:false
生成器:
策略:IDENTITY
名称:
类型:string
长度:50
fixed:false
nullable:false
landarea:
类型:decimal
可空:false
密度:
类型:整数
无符号: false
可空:false
popu lation:
type:integer
unsigned:false
可空:false
manyToOne:
状态:
targetEntity:States
cascade:{}
inversedBy:cities
joinColumn:
state_id:
referencedColumnName:id
lifecycleCallbacks:{}

实体:

  class Cities 
{
//其他vars

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

//其他get / set

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

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

class States
{
//其他vars和get / set

private $ cities;

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

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

/ **
*获取城市
*
* @return Doctrine\Common\Collections\Collection
* /
public function getCities()
{
return $ this-> cities;
}
}

QueryBuilder用法:

  $ query = $ em-> createQueryBuilder()
- > select('c','s')
- > ; $($)
- > innerJoin('c.state','s')
- > orderBy('c.population','DESC' )
- > setMaxResults(10)
- > getQuery();

,错误是:


[语义错误]行0,col 58附近的ORDER BY c.population':
错误:类XYZ\Bundle\CitiesBundle\Entity\Cities没有关联
命名状态


生成DQL:


SELECT c,s FROM CitiesBundle:Cities c INNER JOIN c.state s ORDER BY
c.population DESC


耻辱:(



有人可以帮我解决我的问题吗?





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


注意:未定义的索引:$ b $中的名称b /home/marek/devel/sf2/cities/vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php
line 473



解决方案

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



在城市XML中,尝试放置:

  joinColumn:
name:state_id
referencedColumnName:id

除了尝试将XML中的ManyToOne重命名为manyToOne,但我怀疑这种情况是这里的问题...



希望这有帮助...


This question is related to my another question: Doctrine2 gives me only first instance of related objects

I came up with bidirectional association to try solve my old issue but now I have another problem.

Schema [EDITED]:

  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: {  }

Entities:

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 usage:

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

and an error is:

[Semantical Error] line 0, col 58 near 's ORDER BY c.population': Error: Class XYZ\Bundle\CitiesBundle\Entity\Cities has no association named state

generated DQL:

SELECT c, s FROM CitiesBundle:Cities c INNER JOIN c.state s ORDER BY c.population DESC

shame :(

Could someone help me solve my issue?

[EDIT]

I edited cities schema, now error is:

Notice: Undefined index: name in /home/marek/devel/sf2/cities/vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php line 473

解决方案

I'm sure joinColumns: (notice the plural) is only used in Many-To-Many relation. In other relations you should use joinColumn.

In Cities XML, try putting:

joinColumn:
    name: state_id
    referencedColumnName: id

other than that try renaming 'ManyToOne' to 'manyToOne' in your XML but I doubt that case is the issue here...

Hope this helps...

这篇关于错误:类... \Entity\ ..没有关联名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆