Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony2中扩展supermapped类不会在MySQL中添加列_Php_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Php 在Symfony2中扩展supermapped类不会在MySQL中添加列

Php 在Symfony2中扩展supermapped类不会在MySQL中添加列,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我正在扩展FOSAuthServerBundle,它有超上限类的实体,我需要扩展它们。让我们拿一个,AccessToken。扩展AccessToken时,我需要将其所有父属性映射到数据库中,例如$expiresAt和$scope,但目前它们不是。很明显,有些事情我不明白或者我做错了 以下是我自己的AccessToken yml中的内容: OSC\OAuthServerBundle\Entity\AccessToken: type: entity id: id:

我正在扩展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;
    }

}
  • FOSOAuthServerBundle和OSCOAuthServerBundle位于config.yml中的条令映射列表中

  • 我清除了缓存
  • 字段不自动映射是否正常?我必须在yml配置中全部重写它们吗?如果是的话,在我看来,它违背了映射超类的目的。也许我必须在yml中写入它从映射超类继承的内容

    编辑1:可能这不起作用,因为基类标记不是抽象的

    解决方案

    我必须指向实体,而不是教程告诉我的模型。这是因为在捆绑文件中的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作为BaseAccessToken
    而不是此类
    FOS\OAuthServerBundle\Document\AccessToken

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

    我刚刚尝试过,我删除了表并重新创建了它,但没有成功!谢谢。为什么在类中声明$id、$client和$user作为超类已经这样做了?看看这个例子:。只有超类具有$mapped1和$mapped2声明。超类字段是“受保护”的,您可以在子类中使用它们,而无需再次声明它们。但即使我删除了它们,我的数据库表中仍然只有这3个。好的,所以我必须删除它们,并且使用实体而不是模型!好的,我编辑我的答案,我认为双重声明是问题的原因。
    <?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
    {
    
    }