cakeCake Php 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 clause это всегда показывает log_type = '1'
Я также очистил кеш.
Любая помощь приветствуется, спасибо.

8

Решение

Если ваш код работает нормально на локальной машине, но не работает в производственной среде, вам нужно очистить все файлы в tmp/cache/model а также tmp/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'));
}
2

Другие решения

У меня исправлена ​​проблема, эта проблема была из-за data type объявлено в базе данных. В производстве это было tinyint(1) и в разработке это дано int(1), Это сохраняет правильное значение в базе данных в обеих средах, но в состоянии tinyint(1) работает только с 0 & 1 не с 2.

Я не понял причину этого.

2

По вопросам рекламы [email protected]