2015-09-29 8 views
1

Si je veux faire la mise en page, je dois récupérer les données deux fois, l'une pour obtenir des lignes au total, un pour obtenir les lignes avec limite, par exemplemeilleure façon pour la pagination

<?php 

class Admins extends CI_Model 
{ 
    public function dataTotal() 
    { 
     $total = $this->db->get('admins')->num_rows(); 

     return $total; 
    } 

    public function data() 
    { 
     return $this->db->limit(10, $this->start)->get('admins')->result(); 
    } 
} 

Puis assignez total à la pagination et affecter les données à afficher, il est fait tout à fait sens, mais s'il y a beaucoup de conditions, je dois le faire deux fois, par exemple:

<?php 

class Admins extends CI_Model 
{ 
    public function dataTotal() 
    { 
     $db = $this->db->from('admins') 
       ->where('id >', 1) 
       ->like('name', 'abc', 'both'); 

     return $db->get()->num_rows(); 
    } 

    public function data() 
    { 
     $data = $this->db->from('admins') 
       ->where('id >', 1) 
       ->like('name', 'abc', 'both') 
       ->limit(10, $this->start); 

     return $data->get()->result(); 
    } 
} 

plus conditions signifie code plus dupliquée, une façon de faire état filtre comme un?

Répondre

0

Vous pouvez créer une fonction et utiliser une requête SQL en tant que paramètre, ce qui est l'option la plus recommandée. Si ce n'est pas une option que vous pourriez faire quelque chose comme ceci:

public function data($option = "default") 
{ 
    if($option == 'default') 
    { 
     $data = $this->db->from('admins') 
      ->where('id >', 1) 
      ->like('name', 'abc', 'both') 
    } 
    else if($option == 'other') 
    { 
     $data = $this->db->from('admins') 
      ->where('id >', 1) 
      ->like('name', 'abc', 'both') 
      ->limit(10, $this->start); 
    } 

    return $data->get()->result(); 
} 

Et puis l'appeler:

data(); 
data("other"); 

C'est la façon la plus efficace que je peux trouver.