即使查询匹配结果,CakePHP 2.2 find也会返回空数据

时间:2012-07-08 15:04:26

标签: cakephp model find

我有一个新的烘焙(带烘焙控制台)项目,当我调用model-> find函数时,我有2个模型表现不同。

UsersController

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

WordsController

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

查询(DebugKit)

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不会返回任何结果,而用户1会正确地给出。

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

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

这个问题是否有可能的原因? Word是某种保留关键字吗?怎么调试呢?

3 个答案:

答案 0 :(得分:5)

我明白了。

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

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

答案 1 :(得分:2)

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

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

    );

您是否看到了编码密钥?尝试取消注释或将其设置为正确的编码,瞧!

答案 2 :(得分:0)

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

检查您的模型和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.
}