0

と の 2 つのエンティティがUserありAvatarます。各ユーザーはリストから 1 つのアバターを選択できるので、これは One2One の一方向の関係だと思います。問題は、フォームを保存するときにフィールドavatar_idが常にデータベースにあることです。NULL

コードを見てみましょう:

class User implements UserInterface
{
    /**
     * @var int $avatarId
     * 
     * @ORM\Column(name="avatar_id", type="integer", nullable=true)
     */    
    private $avatarId;

     /**
     * @var Avatar
     * 
     * @ORM\OneToOne(targetEntity="Avatar", cascade={"persist", "remove"})
     */
    private $avatar;  

}

保存する前にvar_dumpユーザー オブジェクトを保存すると、フィールドavatarIdにはオブジェクトが含まれAvatarますが、ID は保存されません。私が間違っていることは何ですか?

["avatarId":"Test\UserBundle\Entity\User":private]=>
    object(Test\UserBundle\Entity\Avatar)#419 (5) {
        ["id":"Test\User\Bundle\Entity\Avatar":private]=>
            int(3)
        ["imageName":"Test\UserBundle\Entity\Avatar":private]=>
            string(14) "death-dark.jpg"
    }
4

2 に答える 2

1

フィールドが自動的に処理するavatarIdため、フィールドは必要ありません。注釈をavatar使用して、参照列名を明示的に設定できます。@JoinColumn

于 2012-04-05T14:49:03.283 に答える
1

いくつかのこと:

ID 列は通常、次の注釈を使用して生成されます。

/**
 * @ORM\Id @ORM\Column(type="integer")
 * @ORM\GeneratedValue
 */

これにより、新しいオブジェクトを作成するときに値を自動的に生成するように ORM に指示されます。したがって、オブジェクトをダンプすると、永続化する前に値が設定されます。

1 対 1 の関係について注意してください。そのリストの複数のユーザーがアバターを使用できる場合、それは多対 1 の関係になります (多数のユーザーが 1 つのアバターに、1 人のアバターが多数のユーザーに)。

于 2012-04-05T14:52:11.677 に答える