这个函数有问题。它应该返回使用下面的sql调用收集的json数据字符串。问题是,我得到一个错误代码"500"时,通过我的服务器访问页面(例如- localhost/app/API/states/Alabama/1/10.json)。奇怪的是,数据在使用.json和没有附加.json的情况下都按照预期显示。据我所知,控制器和模型设置得很好,但错误代码仍然存在:
{"代码":500年,"url":"/VOI2/API/国家/阿拉巴马州/2/10。json","name":"SQLSTATE[42S22]:>Column not found: 1054 Unknown Column 'states'in 'where>子句'","error":{"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'));
}
Issues是另一个带有model/controller的表。我希望以一种有意义的方式设置url,这就是为什么我选择将状态与问题分开的原因。谢谢大家的帮助。
WHERE子句不允许使用别名。参见问题与列别名和你可以使用别名在mysql的WHERE子句?
您应该按照CakePHP的意图使用您的模型。参见检索数据。
通过使用"自定义"查询,CakePHP不会阻止sql注入,你需要"手工"做事情,导致许多问题;
此外,因为您想显示所有问题,但在状态上对它们进行过滤,因此您应该从Issue
模型检索数据,而不是从State
指定model-relations
app/模型/State.php
class State extends AppModel {
public $hasMany = array(
'Issue'
);
}
app/模型/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
手动连接表/模型
如果默认的模型关系不符合您的要求,您可以手动将表连接在一起;请参阅文档中的本章:
加入表注意:我还没有测试过这些例子,它可能工作,否则它是一个很好的起点,让你进入