CakePHP'de mysql kullanarak sayfalandırmak SQL_CALC_FOUND_ROWS

1 Cevap php

Ben Cakephp SINIRI kullanırken toplam satır sayısını döndürmek için MySQL SQL_CALC_FOUND_ROWS özelliği yararlanmak paginate yapmaya çalışıyorum. Umarım, bu) daha sonra (sayfalandırmak paginateCount () ikili sorgu ortadan kaldırabilir.

Benim app_model.php konumunda yer alır bu koyduk, ve bu temelde çalışır, ancak daha iyi yapılabilir. Birisi bana 1 SQL stmt sadece çalıştırır böylece paginate / paginateCount geçersiz kılmak için nasıl anlamaya yardımcı olabilir?

/**
 * Overrkimlikden paginateCount method, to using SQL_CALC_FOUND_ROWS
 */
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    $options = array_merge(compact('conditions', 'recursive'), $extra);
    $options['fields'] = "SQL_CALC_FOUND_ROWS `{$this->alias}`.*";

S: nasıl) (paginate kullanılan AYNI sınır değerini alabilirim?

    $options['limit'] = 1;   // kimlikeally, should return same rows as in paginate()     

S: biz bir şekilde fazladan sorgu olmadan, doğrudan sayfalandırmamayı sorgu sonuç alabilirsiniz?

    $cache_results_from_paginateCount = $this->find('all', $options);   
    /*
     * note: we must run the query to get the count, but it will be cached for multiple paginates, so add comment to query
     */
    $found_rows =  $this->query("/* do not cache for {$this->alias} */ SELECT FOUND_ROWS();");
    $count = array_shift($found_rows[0][0]);
    return $count;
}   

/**
 * Overrkimlikden paginate method
 */
public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
    $options = array_merge(compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'), $extra);

S: her nasılsa (paginateCount doğrudan $ cache_results_for_paginate alabilirsiniz)?

    return $cache_results_from_paginateCount;  // paginate in only 1 SQL stmt
    return $this->find('all', $options);   // kimlikeally, we could skip this call entirely
}

1 Cevap

Ben geçerli sayfa için sonuç verir ve aynı yanıtı bulunan sonuç sayısı bir web hizmetinden sonuçları paginating için bu çözmek yolu önce, sizin denetleyici eylem modeline denetleyicisi paginate özelliğini kopyalamak için çağrı $ this-> paginate (); benim çağrı ayarları modelin paginateCount () yöntemi kullanılabilir böylece. Sonra paginateCount in () sonuçları almak için webcoder çağrısı yayınlıyoruz. Sonra model bir özellik sonuçlarını saklamak sonra mevcut sonuç toplam sayısını döndürür. Sonra modelin paginate () yönteminde, ben getirilen ve paginateCount () yönteminde saklanan sonuçları döndürür.

Belki de bu satırlar boyunca bir şey de sizin için işe yarayabilecek?