0

这个here函数有问题。它应该返回使用下面的 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]:>Column not found: 1054 Unknown column 'states' in 'where >clause'","error":{"errorInfo":["42S22",1054,"未知列 'states' in 'where >clause'"]

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'));  
}

问题是另一个带有模型/控制器的表。我想以一种有意义的方式设置网址,这就是我选择将状态与问题分开的原因。感谢你的帮助。

4

2 回答 2

0

不允许在 WHERE 子句中使用别名。请参阅列别名问题您可以在 mysql 的 WHERE 子句中使用别名吗?

于 2013-04-04T09:17:15.500 回答
0

您应该按照 CakePHP 的意图使用您的模型。请参阅检索您的数据

通过使用“自定义”查询,CakePHP 不会阻止 SQL 注入,并且您需要“手动”执行操作,最终会导致很多问题;

此外,因为您想显示所有问题,但要根据它们所属的状态过滤它们,您应该从Issue模型中检索数据,而不是State

指定模型关系

应用程序/模型/State.php

class State extends AppModel {
    public $hasMany = array(
        '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

手动连接表/模型

如果默认的模型关系不符合您的要求,您可以手动将表连接在一起;请参阅文档中的本章:

连接表

注意: 我没有测试过这些示例,它可能会起作用,否则这是一个很好的起点

于 2013-04-04T12:16:50.720 回答