2012-04-18 3 views
0

Так вот что я пытаюсь сделать. В моей таблице (Курсы) есть несколько записей с одинаковым идентификатором.Cakephp Paginate Distinct record

Когда я получаю данные из paginate, он показывает все записи. Поэтому, если у меня есть 3 записи с Id 5, он будет показывать номер записи 5 три раза.

Теперь я хочу, чтобы он показывал запись только один раз.

Я искал в Интернете, но ничего не нашел.

Если у кого-то возникла такая проблема и нашли решение, пожалуйста, дайте мне знать.

Спасибо,

ответ

1

Глядя на поваренной книге CakePHP, документация для пагинации показывает, что вы можете переопределить элемент $ постраничного. За кулисами это похоже на прохождение параметров для поиска вашей модели («все»). Может быть, попробуйте установить параметр, чтобы явным образом возвращать интересующие вас слова с ключевым словом, чтобы сузить нужные значения?

class RecipesController extends AppController { 

    var $paginate = array(
     'fields' => array('Model.field1', 'DISTINCT Model.field2') 
    ); 

} 
0

Так вот как моя переменная постраничной выглядит следующим образом:

var $paginate = array(
      'Courses' => array(
       'limit' => 20, 
       'page' => 1, 
       'order' => array(
       'Courses.id' => 'asc') 
), 
); 

Переменная состояние выглядит примерно так:

 $cond = array("Courses.id LIKE "=>$this->data['id_search'], 
     "Courses.length LIKE "=>$this->data['length_search'], 
     "Courses.marks LIKE "=>$this->data['marks'] 
     ); 

И это, как я называю постраничной.

$data = $this->paginate('CdmaRfReport',$cond); 

Я пытался делать

$paginate = array(
       'Courses' => array(
        'limit' => 20, 
        'fields' => array('DISTINCT Courses.id'), 
        'page' => 1, 
        'conditions' => $cond, 
        'group' => array('id'), 
        'order' => array(
        'Courses.id' => 'asc') 
     ) 
     ); 

Это не похоже, чтобы помочь.

Я также попытался

$cond = array("DISTINCT Courses.id "=>$this->data['id_search'], 
     "Courses.length LIKE "=>$this->data['length_search'], 
     "Courses.marks LIKE "=>$this->data['marks'] 
     ); 

Даже эти ошибки из я мог бы быть что-то не так. Но я не могу понять это.

Любые предложения, пожалуйста, дайте мне знать.

3

Я столкнулся с вашей проблемой, так как у меня была аналогичная проблема. Решение David Z не работало для меня, но я обнаружил, что групповая переменная в $ paginate работает для меня.

Так что, используя ваш пример кода выше, так я думаю, что он должен работать.

$paginate = array(
      'Courses' => array(
      'limit' => 20, 
      'fields' => array('Courses.id'), 
      'conditions' => $cond, 
      'group' => array('Courses.id'), 
      'order' => array('Courses.id' => 'asc') 
    ) 
    ); 

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

$this->paginate = array ('fields' => array ('Company.*'), 
         'order' => array('Company.name' => 'ASC'), 
         'group' => array('Company.id')); 
$this->set('companies', $this->paginate($this->Company->System)); 

Надеется, что это помогает

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