2012-04-18 10 views
0

これは私がやろうとしていることです。 My table say(Courses)には同じIDを持つ複数のエントリがあります。Cakephp Paginate Distinct record

ページングからデータを取得すると、すべてのレコードが表示されます。したがって、私がId 5を持つ3つのレコードを持つ場合、レコード番号5が3回表示されます。

私が望むのは、レコードが1回だけ表示されることです。

私はオンラインで検索しましたが、何も見つかりませんでした。

誰かがこのような問題に遭遇して解決策を見つけた場合は、教えてください。

おかげで、CakePHPの料理の本を見てみると

答えて

1

は、改ページのドキュメントは、あなたが$のpaginateメンバーをオーバーライドすることを示しています。背後では、これはモデルのfind( 'all')のパラメータを渡すのと似ています。おそらく、あなたが必要とする値を絞り込むためにdistinctキーワードに興味があるfildを明示的に返すようにパラメータを設定しようとしますか?だからここ

class RecipesController extends AppController { 

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

} 
0

は私のpaginate変数がどのように見えるかです:

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') 
    ) 
    ); 

私にとってうまくいく解決策をもっとうまく発するために、私はSystemsに所属しています。私は持っているシステムのために、ユニークな企業のリストを入手したかったのです。これは私のために

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

を働いていた私が使用した正確なコード、これは

を助けている希望です