0

このサイトのいくつかの質問に従いましたが、セットアップの何が問題なのかまだわかりません。私はしばらく困惑してきました。これが基本的な間違いである場合は申し訳ありませんが、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;

    ....
}
4

1 に答える 1

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

    ....
}

これで、クエリを次のように変更できます。

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

Symfony を使用しているかどうかはわかりませんが、このリンクを読むことをお勧めします

于 2012-09-18T04:55:09.707 に答える