【问题标题】:doctrine 2 join association not found学说 2 加入协会未找到
【发布时间】:2012-05-03 17:11:55
【问题描述】:

我已经关注了这个网站上的一些问题,但仍然无法弄清楚我的设置有什么问题。我被难住了一段时间。抱歉,如果这是一个基本错误,我对 Doctrine 还是很陌生。谢谢。

我得到的错误是:

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;

    ....
}

【问题讨论】:

  • 您能告诉我们您希望在这里实现什么吗?可能这里的人可以帮助您解决所需的映射和注释。

标签: php orm doctrine dql


【解决方案1】:

我不确切知道你想要完成什么,但我认为你的实体设计有点“奇怪”,我在这里发布一些代码供你参考:

/**
 * 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();
    }

    ....
}

现在您可以将查询更改为:

SELECT u FROM models\Users u JOIN u.user_usernames c WHERE c.class_id = 1

我不知道你是否使用 Symfony,但我建议你阅读this link

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 2015-10-13
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多