php - Cakephp分页问题

标签 php cakephp pagination cakephp-2.0 paginator

我遇到了一个奇怪的问题。我已经编写了分页代码。一切都按预期工作,但只有条件不工作(仅某些条件) 这是我的分页代码。

//declaration 
public $paginate = array(
        'limit' => 50,
        'paramType' => 'querystring'
    ); 
//use in action
$this->paginate['ApiLog'] = array('limit' => 50, 'order' => 'ApiLog.id DESC', 'paramType' => 'querystring');

$this->paginate['ApiLog']['conditions'] = array('ApiLog.log_type' => 2);
$this->paginate['ApiLog']['joins'] = array(               
            array(
                'table' => 'users',
                'alias' => 'User',
                'type' => 'LEFT',
                'conditions' => array('User.id = ApiLog.user_id')
            )                
        );
$this->Paginator->settings = $this->paginate['ApiLog'];
$apilogs = $this->Paginator->paginate('ApiLog');

此代码在开发环境和返回类型 2 的日志中运行完美,但在生产环境中它仅返回类型 1 的日志。我花了一整天的时间来找出问题。 如果我确实在 conditions array 中添加了任何其他条件,但不会生效但 log_type。 我打印查询日志,在 where 子句 它总是显示 log_type = '1' 我也清除了缓存。 任何帮助表示赞赏,谢谢。

最佳答案

如果您的代码在本地机器上运行良好但在生产环境中无法运行,那么您必须清除 tmp/cache/modeltmp/cahe/persistance 中的所有文件。确保您已授予对 tmp 文件夹的可写权限。

这意味着当您添加新字段、删除现有字段或对数据库架构进行任何更改时,您必须更新 Cake Model 架构。在生产模式下,如果未找到模式缓存文件,那么它将根据数据库中的当前模式创建新的缓存文件。在开发模式下,每次执行都会更新架构缓存。

它仍然是分页问题,​​那么您必须遵循 CakePHP 2.x 文档。在这里,我假设您的代码在 ApiLogsController 中,方法是 index。根据文档,您的代码应该是。

public function index() {
    $this->Paginator->settings = array(
        'limit' => 50,
        'order' => 'ApiLog.id DESC'
        'paramType' => 'querystring',
        'conditions'=>  array('ApiLog.log_type' => 2),
        'recursive'=>-1, // should be used with joins
        'joins'=>array(
            array(
                'table'=>'users',
                'type'=>'LEFT',
                'alias'=>'User',
                'conditions'=>array('User.id = ApiLog.user_id')
            )
        )
    );
    $data = $this->Paginator->paginate('ApiLog');
    $this->set(compact('data'));
}

// your default setting in ApiLogController class
public $components = array('Paginator');
public $paginate = array(
    'limit' => 50,
    'paramType' => 'querystring'
);

public function index() {
// overriding/extending default settings

$this->Paginator->settings['order']='ApiLog.id DESC';
$this->Paginator->settings['conditions']=array('ApiLog.log_type' => 2),
$this->Paginator->settings['recursive']= -1;
$this->Paginator->settings['joins']=array(
        array(
            'table'=>'users',
            'type'=>'LEFT',
            'alias'=>'User',
            'conditions'=>array('User.id = ApiLog.user_id')
        )
    );

$data = $this->Paginator->paginate('ApiLog');
$this->set(compact('data'));
}

关于php - Cakephp分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016654/

相关文章:

javascript - 在 Google map 上使用本地 MySQL 数据库和 PHP 和 JavaScript

PHP PDO 准备语句和值绑定(bind)给出无效参数号错误

php - 生成私有(private)、唯一、安全的 URL

java - Elasticsearch : RemoteTransportException in Paginated search for more than 10000 results

javascript - 修复 javascript 的分页限制

javascript - vueJs 分页和过滤

php - 使用动态路径访问数组

CakePHP:具有不同 html 属性的多个复选框

php - 检查数据库中是否存在记录的方法,如果为真则在CakePHP中返回记录?

database - 我如何查看 cakephp 数据库保存错误?