在Symfony2中扩展超级映射类不会添加MySQL中的列


Extending a supermapped class in Symfony2 does not add the columns in MySQL

我正在扩展FOSAuthServerBundle,它有超映射类的实体,我需要扩展它们。让我们取一个AccessToken。当我扩展AccessToken时,我需要将其所有父属性映射到数据库中,例如$expiresAt$scope,但目前还没有。很明显,有些事情我不理解或者做错了。

以下是我自己的AccessToken yml:中的内容

OSC'OAuthServerBundle'Entity'AccessToken:
    type: entity
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    manyToOne:
        client:
            targetEntity: Client
        user:
            targetEntity: Application'Sonata'UserBundle'Entity'User
    lifecycleCallbacks: {  }

这是我的Accesstoken php文件:

<?php
namespace OSC'OAuthServerBundle'Entity;
use FOS'OAuthServerBundle'Document'AccessToken as BaseAccessToken;
use FOS'OAuthServerBundle'Model'ClientInterface;
use Symfony'Component'Security'Core'User'UserInterface;

class AccessToken extends BaseAccessToken
{
    /**
     * @var integer
     */
    protected $id;
    protected $client;
    protected $user;
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    public function getClient()
    {
        return $this->client;
    }
    public function setClient(ClientInterface $client)
    {
        $this->client = $client;
    }
    public function getUser()
    {
        return $this->user;
    }
    public function setUser(UserInterface $user)
    {
        $this->user = $user;
    }
}

当我运行php应用程序/控制台原则:模式:更新-强制时,我的数据库中只有iduser_idclient_idxpiresAtscope。。。

以下是我验证的内容:

  • 我正在正确扩展FOSAuthServerBundle:

    namespace OSC'OAuthServerBundle;
    use Symfony'Component'HttpKernel'Bundle'Bundle;
    class OSCOAuthServerBundle extends Bundle
    {
        public function getParent()
        {
            return 'FOSOAuthServerBundle';
        }
    }
    

  • FOSOAuthServerBundle和OSCOAuthServerBundle在config.yml 中的条令映射列表中

  • 我清空了缓存

字段没有自动映射是正常的吗?我必须在yml配置中重写它们吗?如果是的话,在我看来,它违背了映射超类的目的。也许我必须用它从映射超类继承的yml来写?

编辑1:也许这不起作用,因为基类Token不是抽象的?

解决方案

我必须指出实体,而不是模型,正如教程告诉我的那样。这是因为在捆绑文件中的ORM映射中,映射是为实体而不是模型完成的!

<?php
namespace OSC'OAuthServerBundle'Entity;
use FOS'OAuthServerBundle'Entity'AccessToken as BaseAccessToken; //Entity here not model !
use FOS'OAuthServerBundle'Model'ClientInterface;
use Symfony'Component'Security'Core'User'UserInterface;

class AccessToken extends BaseAccessToken
{
}

您是否尝试扩展这个类:FOS'OAuthServerBundle'Entity'AccessToken as BaseAccessToken而不是这个FOS'OAuthServerBundle'Document'AccessToken

您不必声明两次属性(在super和sub类中)。不要重新声明$id$client$user