2016-08-18 21 views
8

Tôi đang gặp phải sự cố đã xảy ra. Tôi đã viết mã để phân trang. Mọi thứ đều hoạt động như mong đợi, nhưng chỉ những điều kiện không hoạt động (chỉ một số điều kiện nhất định) Đây là mã của tôi để phân trang.Số phát hành của Bánh Php

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

Mã này được hảo làm việc trên môi trường phát triển và trở lại các bản ghi mà có kiểu 2, nhưng trong sản xuất nó trở lại chỉ ghi rằng đã gõ 1. Tôi đã dành cả ngày để tìm ra vấn đề. Nếu tôi thêm bất kỳ điều kiện nào khác vào conditions array có hiệu lực nhưng không có hiệu lực log_type. Tôi in Nhật ký truy vấn, trong where clause luôn hiển thị log_type = '1' Tôi cũng đã xóa bộ nhớ cache. Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn.

+0

Cố gắng xóa thư mục 'tmp/cache' của bạn – om1

Trả lời

2

Tôi đã cố định vấn đề, vấn đề này là do data type kê khai vào cơ sở dữ liệu. Trong quá trình sản xuất, nó là tinyint(1) và đang được phát triển, được cung cấp int(1). Nó tiết kiệm đúng giá trị trong cơ sở dữ liệu trong cả hai môi trường nhưng trong điều kiện tinyint(1) chỉ hoạt động với 0 & 1 không phải với 2.

Tôi không hiểu lý do đằng sau điều này.

2

Nếu mã của bạn hoạt động tốt trong máy cục bộ nhưng không hoạt động trong quá trình sản xuất thì bạn phải xóa tất cả các tệp trong tmp/cache/modeltmp/cahe/persistance. đảm bảo bạn đã cấp quyền ghi vào thư mục tmp.

Điều đó có nghĩa là bạn phải cập nhật lược đồ Bánh mô hình khi bạn thêm trường mới, xóa trường hiện tại hoặc thực hiện bất kỳ thay đổi nào trong giản đồ cơ sở dữ liệu. Trong chế độ sản xuất Nếu không tìm thấy tệp bộ đệm lược đồ thì nó sẽ tạo các tệp bộ nhớ cache mới dựa trên lược đồ hiện tại trên cơ sở dữ liệu. Trong chế độ phát triển trên mỗi lần thực hiện nó sẽ cập nhật bộ nhớ cache của lược đồ.

Vẫn còn vấn đề về phân trang thì bạn phải làm theo tài liệu CakePHP 2.x. Ở đây tôi giả sử mã của bạn nằm trong số ApiLogsController và phương thức là index. theo tài liệu mà mã của bạn nên có.

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

HOẶC

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

tôi đã xóa bộ nhớ cache. Ngoài ra các thiết lập Paginator của tôi là chính xác. Tôi thêm bất kỳ điều kiện nào khác trong cài đặt, sau đó nó hoạt động – Karan

+0

@Karan, vậy vấn đề của bạn đã được giải quyết chưa? –

+0

không, vấn đề vẫn còn thoát – Karan