2012-05-03 1 views
0

Я следил за некоторыми вопросами на этом сайте и до сих пор не смог выяснить, что не так с моей настройкой. Некоторое время я был в тупике. Извините, если это основная ошибка, я до сих пор новичок в Доктрине. Спасибо.doctrine 2 join association не найден

Ошибки я получаю:

Error: Class models\\Classes_users has no association named users_username... 

Этот запрос:

SELECT u FROM models\Classes_users c JOIN c.users_username u WHERE c.class_id = 1 

Сущности:

/** 
* models\Classes_users 
* 
* @Table(name="classes_users") 
* @Entity 
*/ 
class Classes_users 
{ 
    ... 

    /** 
    * @var string $users_username 
    * 
    * @Id 
    * @ManyToOne(targetEntity="Users", inversedBy="users_username") 
    * @JoinColumn(name="users_username", referencedColumnName="users_username") 
    * @Column(name="users_username", type="integer", precision=0, scale=0, nullable=false, unique=false) 
    */ 
    private $users_username; 

    ... 
} 



/** 
* models\Users 
* 
* @Table(name="users") 
* @Entity 
*/ 
class Users 
{ 
    .... 

    /** 
    * @var string $users_username 
    * @Id 
    * @OneToMany(targetEntity="Classes_users", mappedBy="users_username") 
    * @Column(name="users_username", type="string") 
    */ 
    private $users_username; 

    .... 
} 
+0

Не могли бы вы рассказать нам, что вы ищете для достижения здесь? Может быть, здесь люди могут помочь вам в решении вопроса о картографии и аннотации. – Broncha

ответ

2

Я не знаю точно, что вы хотите достичь, но я думаю, что ваш дизайн объектов был немного «странным», я размещаю здесь код для справки:

/** 
* models\Classes_users 
* 
* @Table(name="classes_users") 
* @Entity 
*/ 
class Classes_users 
{ 
    ... 
    /** 
    * @Id 
    */ 
    private $class_id; // use other varible as Id 

    /** 
    * @ManyToOne(targetEntity="Users", inversedBy="user_usernames") 
    * @JoinColumn(name="user_id", referencedColumnName="id") 
    **Delect this line =>** * @Column(name="users_username", type="integer", precision=0, scale=0, nullable=false, unique=false) 
    */ 
    private $user; // change name to user, this varible is a virtual variable, only make sense in php objects, there would not be a real column in database, but a user_id column produced by Doctrine instead 

    ... 
} 



/** 
* models\Users 
* 
* @Table(name="users") 
* @Entity 
*/ 
class Users 
{ 
    .... 
    /** 
    * @Id 
    * 
    */ 
    $private id; // use other variable as Id 


    /** 
    * @var string $users_username 
    * @Id 
    * @OneToMany(targetEntity="Classes_users", mappedBy="user") 
    **Delect this line =>** * @Column(name="users_username", type="string") 
    */ 
    private $user_usernames; // suggest change name to reflect the one to many associations, this variable should be an arraycollection, and there would not be a real column in database 

    public function __construct() 
    { 
     $this->user_usernames = new ArrayCollection(); 
    } 

    .... 
} 

Теперь вы можете изменить свой запрос:

ВЫБРАТЬ ИЗ U моделей \ Users у РЕГИСТРИРУЙТЕСЬ u.user_usernames с, где c.class_id = 1

Я не знаю, если вы используете Symfony, но я предлагаю вам прочитать this link