Php symfony2或条令正在从我的实体中删除用户名字段——为什么?

Php symfony2或条令正在从我的实体中删除用户名字段——为什么?,php,symfony,doctrine,Php,Symfony,Doctrine,更新:这不仅仅影响用户名。我甚至尝试在我的模式中将该列重命名为foo,但该列始终返回null 我的数据库是MySQL(InnoDB)。我有一个users表,其中包含属性ID,username,name,email,password。表中插入了大量用户 在原则方面,正确定义了我的AppBundle\Entity\User类。我可以查询我的用户并获得他们的列表,所有列都保持不变——除了username列 尽管PHP中定义了username: /** * User * * @ORM\Table(

更新:这不仅仅影响
用户名
。我甚至尝试在我的模式中将该列重命名为
foo
,但该列始终返回
null

我的数据库是MySQL(InnoDB)。我有一个
users
表,其中包含属性
ID
username
name
email
password
。表中插入了大量用户

在原则方面,正确定义了我的
AppBundle\Entity\User
类。我可以查询我的用户并获得他们的列表,所有列都保持不变——除了
username

尽管PHP中定义了
username

/**
 * User
 *
 * @ORM\Table(name="user", uniqueConstraints={@ORM\UniqueConstraint(name="username_UNIQUE", columns={"username"})})
 * @ORM\Entity
 */
class User
{
    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=45,  nullable=false)
     */
    private $username;

    // ...


    /**
     * Set username
     *
     * @param string $username
     *
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }
当我获取实体并转储它们时,用户名字段神秘地被置空:

User {#389 ▼
  -id: 2
  -username: null
  -name: "Sam"
  -password: XXX
  -email: XXX
  -oPhone: ""
  -mPhone: XXX
  -hPhone: ""
  -institutions: PersistentCollection {#390 ▶}
}
即使它确实存在并且在数据库上不为空:

mysql> SELECT * FROM user WHERE id=2

# ID, username, name, password, email, o_phone, m_phone, h_phone
2, sjw, Sam, XXX, XXX, , XXX, 

试图通过PHP访问该字段会导致它抱怨不存在这样的
username
字段,从而阻止我使用该实体进行用户身份验证

  • 我没有在Symfony中使用任何自定义应用程序包,Symfony是PHP5.4上的2.7.6版(带有doctrine2)

  • 我已经清除了缓存,确保没有生成任何.yml或.xml模型

  • 我已经检查了我的数据库——使用sqlalchemy Python库和
    sqlacodegen
    我有一个Python版本的ORM。如果
    username
    列没有问题,结果将按其应有的方式显示,而不是为null或非类型

  • 我暂时禁用了SecurityBundle,以查看它是否在幕后删除用户名——该字段仍然为空

  • 我仔细研究了Symfony文档


不,没有主意了。Symfony在幕后做什么?

因此,正如作者所解释的,这是一个缓存问题。我完全忘记了我已经启用了APC来缓存数据库条目!事实证明,它还缓存了数据库元数据和各种代码位,因此,即使我清除了所有其他内容,APC缓存也没有得到更新

这就是罪魁祸首,
config.yml
中的这些行本应只在
config\u prod.yml
中出现:

    doctrine:
        orm:
            metadata_cache_driver: apc
            result_cache_driver: apc
            query_cache_driver: apc

(另一个解决方案可能是重新启动
php fpm
,因为这就是我在我的环境中运行php的方式——这可能需要一秒钟的时间,但我整整两天都没有想到……doh…

将您的模型更改为
public$username
“并试图通过PHP访问字段”当您发现错误时,是否使用$user->getUsername()?记不起错误是什么--当我试图使用该类进行用户身份验证时,框架抛出了关于
username
不是字段的错误(即使它设置为public)。然而,这是昨天的工作请回答你的问题,你如何储蓄user@Dale将实体字段设置为公共是一个非常糟糕的主意。