所以我正在为网站的一部分构建这个小的REST API,这样我就可以在主要内容加载后异步加载注释。但是每当我的数据集超过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('_serialize',array('response'));
发送JSON响应时,$ comments变量仍然无法访问,因此我的响应返回空,长度为0,这当然非常麻烦且非常令人困惑。
之前我遇到过这个问题并且发现它通过请求一组有限的条目来解决,但在这种情况下我需要整个评论列表,不想做几个请求并杀死目的。 Cake可以从数据库中检索并在控制器中保持可用的限制吗?我在这里错过了什么吗?
我还尝试“手动”执行json_encode($response);
,但由于问题是$response
var无法访问/空,当然它也会失败。
json响应适用于大约25条或更少的评论,但许多网站条目的评论多于此,最多100条评论!我怎样才能解决这个奇怪的问题?
答案 0 :(得分:0)
因此,在网上搜索具体答案并最终进入#cakephp IRC频道之后,一位非常善良的人建议我的数据可能会有一些编码错误。
事实证明他是正确的,评论表仍然有一些编码为latin1的评论。回到那一天,我将数据库移动到utf8,但这只是一个字符集更改,而不是每个条目的实际文本编码转换。
快速搜索后,我发现this post指示您如何使用三个简单的cli行将数据量从latin1移动到utf8。
我希望这能为其他可能解决这个问题的人服务,并且不知道该怎么做:)
感谢那些对此问题发表评论的人。