【问题标题】:cakephp Column not found: 1054 user_idcakephp 列未找到:1054 user_id
【发布时间】:2015-09-06 23:56:00
【问题描述】:

我已经做了一张桌子:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

现在当我使用 bin\cake bake 时一切正常,但当我进入索引视图时。我收到一个错误Column not found: 1054 Champ 'Users.user_id'

这是 Cakephp 的查询:

SELECT Users.id AS `Users__id`, Users.username AS `Users__username`, Users.password AS `Users__password` FROM users Users WHERE Users.user_id = :c0 LIMIT 1

我不知道我做错了什么,但教程博客建议不要使用 user_id 而只是使用 id 作为主键。

我的模型确实将 displayField 列为 user_id,但它仍然不起作用:

 $this->table('users');
 $this->displayField('user_id');
 $this->primaryKey('user_id');

【问题讨论】:

  • 注意区分大小写:CREATE TABLE IF NOT EXISTS **users** SELECT Users.id AS **Users__id**
  • 你的别名有两个下划线,Users__id,你的where没有,Users.user_id。同样在 cakephp 中,您可以在 where 子句中使用别名?
  • @moskito-x 检查表别名。
  • @chris85 别名列是ORM使用的,不需要在WHERE子句中使用,实际上你不应该使用它们。
  • @ndm : SELECT Users.id AS Users__id,..

标签: php mysql cakephp-3.0


【解决方案1】:

我不知道我做错了什么,但教程博客建议不要使用user_id,而只使用id作为主键。

* 强调我的

那么为什么你使用它呢?您的表中没有 user_id 列,因此您看到的是预期的行为。

主键名为id,因此请参考该列而不是user_id。另外你不希望你的显示字段是PK,使用用户名更有意义。

$this->table('users');
$this->displayField('username');
$this->primaryKey('id');

【讨论】:

  • 我不使用任何东西,它是 cakephp 制作了所有的语法和键,我只制作了表格。所以这意味着 cakephp 做错了什么?
  • @user2157622 可能,但是如果没有看到完整的图片就很难判断,即所有现有的表、您正在使用的确切命令、正在使用的确切 CakePHP/Bake 版本等。 .. 通常当 Cake 使用意外的列名时,它是由缓存模式引起的,即在没有清除缓存的情况下对表进行了更改 (tmp/cache/models),但这只是一个可能的原因。跨度>
  • 非常感谢,确实是缓存问题,我删除了文件并重新烘焙了所有内容,现在它可以完美运行了。我在上面将您的答案标记为答案,但确实是缓存起到了作用。
猜你喜欢
  • 2017-07-23
  • 2023-04-07
  • 2015-04-20
  • 1970-01-01
  • 2015-02-22
  • 2016-04-09
  • 1970-01-01
  • 2020-05-13
相关资源
最近更新 更多