3

FOSUserBundleを拡張して正常に動作するUserBundleがあります。しかし今、私は異なるプロパティを持つ複数のユーザーエンティティを作成したいと思います。しかし、問題は、メインのユーザーエンティティを次のように拡張するユーザーエンティティを作成するときです。

class User extends BaseUser
{
    protected $id;
    // The main user class who extends FOSUser entity
}

class UserB extends User
{
    //
}

これを行うと、エラーが発生します: `

MyApp \ UserBundle \ Entity \ UserB :: $ idへのアクセスレベルを保護する必要があります(クラスMyApp \ UserBundle \ Entity \ Userのように)。

そして、UserBエンティティで保護されたIDを作成すると、次のようになります。

PHPの致命的なエラー:MyApp \ UserBundle \ Entity \ UserB ::$idを再宣言できません。

そして最後に、UserエンティティのIDを削除することはできません。Doctrineエラーが返されます。

[Doctrine \ ORM \ Mapping\MappingException]
エンティティ'MTS\ UserBundle \ Entity\User'に識別子/主キーが指定されていません。すべてのエンティティには、識別子/主キーが必要です。

誰かが私を助けることができますか?

編集:問題は解決しました。私のコード:

/**
 * MTS\UserBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"userfb" = "UserFB"})
 */
abstract class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string $type
     */
    private $type;
}

/**
 * @ORM\Table()
 * @ORM\Entity()
 */
class UserB extends User
{
    // My variables
}
4

1 に答える 1

5

あなたの問題は注釈の欠如であるように思われます。

作業コードからこれを削除することで、「すべてのエンティティに識別子/主キーが必要です」というエラーメッセージを複製することができました。

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

私のための作品:

 /**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}
于 2011-12-06T11:39:21.340 に答える