cakephp ve SQL_CALC_FOUND_ROWS

4 Cevap php

Ben (bu sayfalandırmaya için değil unutmayın) bir sorgu içine SQL_CALC_FOUND_ROWS eklemek çalışıyorum

Ben şu anda var kodunu sorgulamak bir CakePHP bu eklemek çalışıyorum lütfen aşağıda yer almaktadır:

return $this->find('all', array(
                'conditions' => $conditions,
                'fields'=>array('SQL_CALC_FOUND_ROWS','Category.*','COUNT(`Entity`.`id`) as `entity_count`'),
                'joins' => array('LEFT JOIN `entities` AS Entity ON `Entity`.`category_id` = `Category`.`id`'),
                'group' => '`Category`.`id`',
                'order' => $sort,
                'limit'=>$params['limit'],
                'offset'=>$params['start'],
                'contain' => array('Domain' => array('fields' => array('title')))
            ));

Not Bu tablo, örneğin için SQL_CALC_FOUND_ROWS uygulamak için çalışır gibi 'fields'=>array('SQL_CALC_FOUND_ROWS',' Bu Açıkçası çalışmıyor SELECT Kategori . SQL_CALC_FOUND_ROWS ,

Bunu yapmanın yine de var mı? Herhangi bir yardım büyük, teşekkürler duyacağız.

4 Cevap

Sen cakephp paginate using mysql SQL_CALC_FOUND_ROWS bakmak isteyebilirsiniz. Eğer gibi kişi benzer bir sözdizimi vardı ve onun için çalıştı.

O her zaman $this->find('count', $params); (http://book.cakephp.org/view/1020/find-count) veya $this->query('YOUR SQL QUERY HERE'); (http://book kullanabilirsiniz işe yaramazsa .cakephp.org/view/1027/query).

Bunun yanında size 'joins' birlikte 'contain' ile kullanmak gerekir. documentation "could lead to some SQL errors (duplicate tables), so you need to use the joins method as an alternative for Containable" Buna göre.

Belki aşağıdaki gibi saha parametre yapabilirsiniz:

'fields'=>array('SQL_CALC_FOUND_ROWS *','COUNT(`Entity`.`id`) as `entity_count`')

Bu korkunç, horrible sorgu içine çıkmamış SQL_CALC_FOUND_ROWS almak için kesmek olduğunu, ama çalışıyor:

$categories = $this->Category->find('all', array(
   'fields' => array('SQL_CALC_FOUND_ROWS 0.0 AS dummy_field,1', 'Category.*', ...),
   'limit'  => 42,
   ...
));
$totalCategories = $this->Category->query('SELECT FOUND_ROWS() as `total_categories`');

Tüm kredi http://mogura.in/blog/2011/06/17/cakephp-1-3-sql_calc_found_rows adlı "Kani" gider.

Ben fonksiyonları inşa pasta ile bunu gerçekleştirmek için bir yol buldu.

$dbo = $this->User->getDataSource();

//buildStatement() creates a Standard SQL Statement
$subQuery = $dbo->buildStatement(
    array(
        'fields' => $fields,
        'table' => $dbo->fullTableName($this->User),
        'alias' => 'User',
        'limit' => null,
        'offset' => null,
        'joins' => array(),
        'conditions' => $conditions,
        'order' => null,
        'group' => null
    ),
    $this->User
);

//Add the SQL_CALC_FOUND_ROWS part
$subQuery = str_replace('SELECT', 'SELECT SQL_CALC_FOUND_ROWS', $subQuery);
$Users = $this->User->query($subQuery);

//Get FOUND ROWS
$foundRows = $this->User->query("SELECT FOUND_ROWS()");
$count = intval($foundRows[0][0]['FOUND_ROWS()']);