2016-08-18 5 views
8

Перед лицом проблемы. Я написал код для разбивки на страницы. Все работает так, как ожидалось, но только условия не работают (только определенные условия). Вот мой код для разбивки на страницы.Cake Php paginator issue

//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' Я также очистил кеш. Любая помощь приветствуется, спасибо.

+0

Попробуйте удалить папку 'tmp/cache' – om1

ответ

2

Я установил вопрос, этот вопрос должен был data type объявлен в базу данных. В производстве это было tinyint(1) и в разработке оно дано int(1). Он сохраняет правильное значение в базе данных в обеих средах, но в состоянии tinyint(1) работает только с 0 & 1 не с 2.

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

2

Если ваш код работает нормально на локальном компьютере, но не работает в производстве, вам необходимо очистить все файлы в tmp/cache/model и tmp/cahe/persistance. убедитесь, что вы предоставили права на запись в папку tmp.

Это означает, что вам необходимо обновить схему модели Cake при добавлении нового поля, удалении существующего поля или внесении любых изменений в схему базы данных. В режиме производства Если файл кэша схемы не найден, он будет создавать новые файлы кэша на основе текущей схемы в базе данных. В режиме разработки при каждом выполнении он обновляет кеш схемы.

Все еще его проблема в разбивке на страницы, тогда вы должны следовать документации 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')); 
} 
+0

. Я уже очистил кеш. Также мои настройки Paginator верны. Я добавляю любое другое условие в настройки, тогда оно работает – Karan

+0

@ Karan, так что теперь ваша проблема решена? –

+0

nope, вопрос все еще выходит – Karan