这里有这个功能的问题。它应该返回使用下面的sql调用收集的json数据字符串。问题是我通过我的服务器访问页面时收到错误代码“500”(例如 - localhost / app / API / states / Alabama / 1 / 10.json)。奇怪的是,使用.json和没有附加的.json,数据显示为预期。据我所知,控制器和模型设置得很好,但错误代码仍然存在:
{“code”:500,“url”:“/ VOI2 / API / states / Alabama / 2 / 10.json”,“name”:“SQLSTATE [42S22]:>未找到列:1054未知列'where'在'where>子句'“,”错误“:{”errorInfo“:[”42S22“,1054,”未知列'状态'在'where>子句'“]
public function index($stateName, $page, $limit = 10, $user = null) {
$this->State->recursive = 0;
$limit;
$set_limit = $page * $limit - ($limit);
$states = $this->State->query("SELECT *
FROM states, issues
WHERE stateName = '" . $stateName ."'
AND issues.state_id = states.id LIMIT " . $set_limit . "," . $limit)
$this->set('states', $this->paginate($states));
$this->set('_serialize', array('states'));
}
问题是另一个带有模型/控制器的表。我希望以有意义的方式设置网址是我选择将状态与问题分开的原因。 感谢你的帮助。
答案 0 :(得分:0)
不允许在WHERE子句中使用别名。请参阅Problems with Column Aliases和Can you use an alias in the WHERE clause in mysql?
答案 1 :(得分:0)
您应该按照CakePHP的预期使用您的模型。请参阅Retrieving Your Data。
通过使用'自定义'查询,CakePHP不会阻止SQL注入,你需要“手动”做事,导致长期存在许多问题;
此外,由于您要显示所有问题,但要对其所属的状态进行过滤,您应该从Issue
模型中检索数据,而不是State
应用程序/型号/ State.php
class State extends AppModel {
public $hasMany = array(
'Issue'
);
}
应用程序/型号/ Issue.php
class Issue extends AppModel {
public $belongsTo = array(
'State'
);
}
要对数据进行分页,请参阅Pagination
在你的控制器内:
class MyController extends AppController {
public $paginate = array(
'Issue' => array(
// Default limit, can be overridden via 'limit' named parameter
// e.g. /MyController/index/limit:20
'limit' => 10,
// Probably required to get 'State' in the results
'recursive' => 1,
);
);
public function index($stateName)
{
$conditions = array(
'State.stateName' => $stateName
);
// I'll leave this name for now, better call it 'issues'?
$states = $this->paginate('Issue', conditions)
$this->set('states', states);
$this->set('_serialize', array('states'));
}
}
要显示分页数据,您还应使用PaginatorHelper
如果默认的模型关系不符合您的要求,您可以手动将表连接在一起;请参阅文档中的这一章:
注意:强> 我没有测试这些例子,它可能可能工作,否则它是一个很好的起点,让你去