symfony2或doctrine正在从我的实体中删除用户名字段 - 为什么?

时间:2015-11-13 14:56:23

标签: php symfony doctrine

更新:这不仅仅是username影响。我甚至尝试将列重命名为我的架构中的foo,但仍然会为该列返回null

我的数据库在MySQL(InnoDB)中。我有一个users表,其中包含属性IDusernamenameemailpassword。表中插入了一堆用户。

在Doctrine方面,我的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字段存在,阻止我使用此实体进行用户身份验证。

  • 我没有在PHP 5.4上使用Symfony中的任何自定义应用程序包,版本为2.7.6(带有doctrine2)。

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

  • 我已经检查了我的数据库 - 使用sqlalchemy Python库和sqlacodegen我有一个我的ORM的python版本。 username列没有问题,结果显示为应该,而不是null或NoneType。

  • 我暂时禁用了SecurityBundle以查看它是否正在删除幕后的用户名 - 该字段仍然无效。

  • 我仔细阅读了Symfony文档...

没有,出于想法。 Symfony在幕后做什么?

1 个答案:

答案 0 :(得分:0)

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

这是罪魁祸首,config.yml中的这些行应该只有 <{1}}:

config_prod.yml

(另一个解决方案可能只是重新启动 doctrine: orm: metadata_cache_driver: apc result_cache_driver: apc query_cache_driver: apc ,因为这就是我在我的环境中运行PHP的方式 - 这可能需要一秒钟才能完成,但我没有考虑整体两天......呃...)