【问题标题】:CakePHP 2.2 find returns empty data even if query matches results即使查询匹配结果,CakePHP 2.2 find 也会返回空数据
【发布时间】:2024-01-12 15:34:02
【问题描述】:

我有一个新鲜出炉的(带有烘培控制台)项目,其中有 2 个模型在我调用 model->find 函数时表现不同。

用户控制器

public function index() {
    $this->User->recursive = 0;
    $this->set('users', $this->paginate());
}

单词控制器

public function index() {
    $this->Word->recursive = 0;
    $this->set('words', $this->paginate());
}

查询(调试工具包)

SELECT `Word`.`*` FROM `words` AS `Word` WHERE `Word`.`iniziale` = 'A' AND `Word`.`pubblicata` = '1' ORDER BY `Word`.`parola` ASC LIMIT 10
Affected 10 
Num rows 10

在这两种情况下,检查的查询都影响了行,但是如果我调试 paginate() 结果,WordsController 不会返回任何结果,而用户则正确给出。

Word模型没有关系,我尝试将模型名称更改为Term,得到相同的结果。

我还尝试将 CakePHP 核心降级到 2.1.4。什么都没有。

此问题是否有任何可能的原因? Word 是某种保留关键字吗?如何调试?

【问题讨论】:

  • 您说您在使用“术语”时遇到了与使用“Word”时相同的问题,对吧?这将使您对“Word”一词受到保护的问题无效......等等
  • 粘贴您在视图中使用的代码以显示结果?并粘贴您的调试代码?
  • 在视图中我只有一个 debug($words);
  • 您的数据库中有条目吗?
  • 是的,两个表都有数百行。正如我所写,查询返回行但 Cake 无法识别它们...

标签: cakephp model find


【解决方案1】:

我想通了。

我在单词表 (UTF8) 中有一些包含特殊字符的文本,例如 àòèéìù。 Cake 删除了所有包含这些字符的结果。我尝试用“e”替换“è”,神奇地记录在 Cake 中!

希望我 5 小时的头痛能帮助别人!

【讨论】:

    【解决方案2】:

    正确答案遵循接受。您应该在数据库配置中设置编码: 在我的conf中我有:

    public $default = array(
         'datasource' => 'Database/Mysql',
                    'persistent' => false,
                    'host' => 'localhost',
                    'login' => 'giuseppe',
                    'password' => 'pass',
                    'database' => 'db'
                    'prefix' => '',
                    //'encoding' => 'utf8',
    
        );
    

    你看到编码键了吗?尝试取消注释或将其设置为正确的编码,瞧!

    【讨论】:

    • 这解决了我的问题。我也有空白结果。我已取消注释并将其设置为“utf8”,现在记录可见。
    【解决方案3】:

    引用上述问题中的评论..

    检查你的模型和AppModel,看看是否有afterFind()。 afterFind 调用必须在最后返回 $results 数据集。

    function afterFind($results, $primary = false)  {
        //some code here..
        return $results; //I had this commented out for some reason
        //and it generated the same issue.
    }
    

    【讨论】: