2016-08-18 46 views
8

Mam do czynienia z problemem odrodzonej. Napisałem kod do stronicowania. Wszystko działa zgodnie z oczekiwaniami, ale tylko warunki nie działają (tylko niektóre warunki). Oto mój kod do stronicowania.Tort 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'); 

Ten kod jest prefektem pracy na środowisko programistyczne i powrót dzienników, które ma typ 2, ale w produkcji powróci tylko dzienniki, które ma typ 1. Spędziłem cały dzień, aby dowiedzieć się problem. Jeśli dodam inny warunek w conditions array, który działa, ale nie ma wartości log_type. Drukuję dzienniki zapytań, w where clause zawsze pokazują log_type = '1' Mam również wyczyszczone pamięci podręcznej. Każda pomoc doceniona, dzięki.

+0

Spróbuj usunąć folder 'tmp/cache' – om1

Odpowiedz

2

Mam ustalony problem, Kwestia ta była spowodowana data type zadeklarowana w bazie danych. W produkcji był to tinyint(1), aw opracowaniu nadano int(1). Zapisuje poprawną wartość w bazie danych w obu środowiskach, ale w stanie tinyint(1) działa tylko z 0 & 1, a nie z 2.

Nie rozumiem przyczyny za tym.

2

Jeśli twój kod działa poprawnie na lokalnym komputerze, ale nie działa w produkcji, musisz wyczyścić wszystkie pliki w tmp/cache/model i tmp/cahe/persistance. upewnij się, że nadałeś pozwolenie na zapis do folderu tmp.

Oznacza to, że należy zaktualizować schemat modelu Cake, dodając nowe pole, usuwając istniejące pole lub wprowadzając zmiany w schemacie bazy danych. W trybie produkcyjnym Jeśli nie zostanie znaleziony plik pamięci podręcznej schematu, utworzy on nowe pliki pamięci podręcznej na podstawie bieżącego schematu bazy danych. W trybie deweloperskim przy każdym wykonaniu będzie aktualizować pamięć podręczną schematu.

Wciąż jest to problemem w paginacji, więc musisz przestrzegać dokumentacji CakePHP 2.x. Tutaj zakładam, że twój kod jest w ApiLogsController, a metoda jest index. zgodnie z dokumentacją Twój kod powinien być.

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

LUB

// 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

Mam już wyczyszczone pamięci podręcznej. Również moje ustawienia Paginatora są poprawne. Dodaję inny warunek w ustawieniach, to działa – Karan

+0

@Karan, więc teraz twój problem został rozwiązany? –

+0

nie, problem nadal trwa – Karan