包含模型数组的CakePHP变量变得不可访问?

包含模型数组的CakePHP变量变得不可访问?,php,json,cakephp,Php,Json,Cakephp,因此,我正在为网站的一部分构建这个小型RESTAPI,以便在加载主要内容后,可以异步加载注释。但每次我的数据集超过25个条目时,我存储注释的变量就变得完全无法访问 这正是我正在执行的数据库查找操作: // A nice default before responding $response = array('status'=>'error','message'=>'Request incomplete'); // [...] Some validation stuff // $re

因此,我正在为网站的一部分构建这个小型RESTAPI,以便在加载主要内容后,可以异步加载注释。但每次我的数据集超过25个条目时,我存储注释的变量就变得完全无法访问

这正是我正在执行的数据库查找操作:

// A nice default before responding
$response = array('status'=>'error','message'=>'Request incomplete');
// [...] Some validation stuff

// $response is perfectly accessible here
$response = $this->Comment->find(
    'threaded',
    array(
        'conditions' => array(
            'Comment.object_class' => $query['object_class'],
            'Comment.object_id' => $query['object_id'] ,
            'Comment.status' => 'approved'
            ),
        'order' => 'Comment.created ASC'
        // No limits, I need all the comments
        )
    );
// $response is not accessible anymore
// So my JSON response below comes absolutely empty;
$this->set('response',$response);
$this->set('_serialize',array('response'));
当我使用
$this->set时(“序列化”,数组(“响应”)
为了能够发送JSON响应,$comments变量仍然无法访问,因此我的响应返回为空,长度为0,这当然是非常麻烦和非常混乱的

我以前遇到过这个问题,并且发现它通过请求一组有限的条目来解决,但是在这种情况下,我需要完整的注释列表,不想多次请求并终止目的。蛋糕从数据库中检索并在控制器中保持可用性是否有限制?我是不是遗漏了什么

我还尝试“手动”执行
json\u编码($response)$response
var不可访问/为空,因此它当然也会失败


json响应对大约25条评论或更少的评论有效,但许多网站条目的评论多于此,最多100条评论!我该如何解决这个奇怪的问题呢?

因此,在上网寻找具体答案并最终进入#cakephp IRC频道后,一位非常善良的家伙建议我的数据可能有一些编码错误

事实证明他是正确的,注释表中仍然有一些注释被编码为latin1。回到那天,我将数据库移动到utf8,但这只是一个字符集更改,而不是每个条目的实际文本编码转换

在快速搜索之后,我找到了一个命令行,它指示您如何使用三个简单的cli行将加载的数据从latin1移动到utf8

我希望这有助于其他可能遇到此问题但不知道该怎么办的人:)


感谢那些对这个问题发表评论的人。

在$response中有多少条记录,我是说你的估计?在25或30个根记录中,数据检索失败,我也是以find('threaded')的形式进行的,因为注释线程还支持一个嵌套级别的注释。所以我想说大约有30个条目它停止工作了。看起来查询有问题,因为30个条目什么都不像,检查表索引,设置调试级别3,获取实际查询并运行解释查看查询中的错误您是否尝试使用调试($response),它显示了什么,你是否得到完全空的,或者它也可能有数据和索引没有做得很好,索引为ex$response[0]['Comment']的变量。因此,如果我在注释模型中禁用$belongsTo,我可以使它最多工作50个条目,但这实际上不是我现在的选项,因为我不会将用户数据保存到注释本身。当我使用debug()时;在一个好的数据集上,它显示了它应该显示的内容,但是如果我在同一个var上使用它,当它失败时,则不会弹出任何内容,只有调试框标题,没有内容,它甚至不会说null。