2015-06-05 3 views
5

Я работаю над проектом cakephp и новым для cakephp. Как упоминалось в заголовке, мне нужно разбивать результирующий набор запроса mysql, чтобы отображать их в представлении.Как создать пользовательский результат запроса в cakephp

Таким образом, я могу разбивать на страницы результаты из модели «Asin».

$this->paginate =array('Asin'=>array(
      'fields' => array('sku','fnsku'), 
      'conditions' => $marketplace, 
      'page' => 1, 'limit' => 20, 
      'order' => array('Asin.asin' => 'asc') 
     ) 
$data = $this->paginate('Asin',$criteria); 

И мне нужен способ разбиения на страницы результата набора нижеследующего запроса.

$resultset = $this->Asin->query("SELECT * FROM products INNER JOIN asins ON products.id=asins.id ORDER BY products.id"); 

как можно добавить разбивку на страницы?

+0

Пожалуйста, проверьте ответ при условии, является ли это полезным. Благодарю. –

ответ

4

CakePHP использует два метод для управления нумерацией страниц запросов, которые постраничные и paginateCount, они используются, чтобы получить данные страницы и общее количество записей соответственно. Для того, чтобы разбиение на страницы выполнялось с вашими пользовательскими запросами, нам нужно будет реализовать обе вышеописанные функции в нашем файле модели, где вы хотите иметь разбиение на страницы, чтобы работать с пользовательскими запросами.

public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {  
    $recursive = -1; 

    // Mandatory to have 
    $this->useTable = false; 
    $sql = ''; 

    $sql .= "Your custom query here just do not include limit portion"; 

    // Adding LIMIT Clause 
    $sql .= (($page - 1) * $limit) . ', ' . $limit; 

    $results = $this->query($sql); 

    return $results; 
} 

....

public function paginateCount($conditions = null, $recursive = 0, $extra = array()) { 

    $sql = ''; 

    $sql .= "Your custom query here just do not include limit portion"; 

    $this->recursive = $recursive; 

    $results = $this->query($sql); 

    return count($results); 
} 

Тогда, наконец, в действии контроллера

// Do not forgot to set this, not sure why 
$this->Asin->recursive = 0; 

// Setting up paging parameters 
$this->paginate = array('Asin'=>array('limit'=>5)); 

// Getting paginated result based on page # 
$this->set('userData', $this->paginate('Asin')); 
+0

, это не работает с объединениями, я не проверял это с обычным запросом. – urfusion

Смежные вопросы