【问题标题】:CakePHP model and querying troublesCakePHP 模型和查询问题
【发布时间】:2013-12-01 05:48:39
【问题描述】:

我使用的是 CakePHP 2.3.8,但无法让 Cake 正确搜索值。它似乎不区分大小写。我正在搜索“User.id”,查询结果显示为“user.id”

users table
id  |   username   | password  |  email   | created

我正在尝试在我的 ReservationController 中查找用户的创建日期

$this->loadmodel('User');
$date = $this->User->find('first',array(
                                    'conditions' => array(
                                        'User.id' => $id    //note: 'id' => $id gives the same results
                                     )
                          ));

我收到以下错误

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user.id' in 'where clause'
SQL Query: SELECT `User`.`created` FROM `TestDB`.`users` AS `User` WHERE `user`.`id` = 1 LIMIT 1

当我将查询复制到 PHPMyadmin 并将“user.id”更改为“User.id”时,它就会起作用。为什么即使我在查询中将其大写,Cake 仍将 u 设为小写?如果我将其更改为“Users.id”,蛋糕将使用 uppsercause U 进行搜索并添加 s,但这不是我想要的。

我尝试使用public $primaryKey = 'id'; 向我的用户模型添加主键,但这并没有做任何事情。目前,我的用户模型中没有任何对主键的引用,所以我不确定它在哪里/为什么决定搜索“user.id”,即使我在搜索中专门引用了“user.id”。事实上,我的用户模型中唯一的事情就是表单验证。

【问题讨论】:

  • 通常CakePHP 不应该修改密钥,除非正确引用它。首先尝试清除您的缓存 (/app/tmp/cache/),这通常会修复与模型/db/schema 相关的问题。你有没有用一个干净的 CakePHP 安装和一个虚拟模型测试它,只是为了检查它是否是一个普遍的问题?最新的 2.4.3 也会发生同样的情况吗?

标签: mysql cakephp


【解决方案1】:

如果是同一模型,则不需要在查询中添加模型名称。Retriving data

$this->loadModel('User');
$date = $this->User->find('first',array(
                                    'conditions' => array(
                                        'id' => $id
                                     )
                          ));

【讨论】:

  • 这不起作用,也不会产生影响。这就是我将“User.id”放在首位的全部原因。引用 modelName 不会损害查询。如果我的模型碰巧设置为与另一个具有相同列名(虽然不是 id)的表具有 hasMany 关系,那么这将是必要的,否则会导致该列不明确。我希望 StackOverflow 上的你们不要像 Reddit 那样快速否决任何事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2011-06-22
相关资源
最近更新 更多