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库和
我有一个Python版本的ORM。如果sqlacodegen
列没有问题,结果将按其应有的方式显示,而不是为null或非类型username
- 我暂时禁用了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将实体字段设置为公共是一个非常糟糕的主意。