トップ > Tech > PHP > CakePHP > Paginatorで一時的にJOINする

Paginatorで一時的にJOINする

find で検索する場合は、オプションの joins を指定して、一時的に INNER JOIN 等が可能だが、Pagination している場合は、find を直接呼ばないので、同じ手法ではできない。

基本的にはコントローラの $paginate 変数の joins に設定しておけばよいが、一時的にアクション内から設定する場合は次のようにするとよい。

$this->paginate['joins'] = array(
    array(
        'type' => 'INNER',
        'table' => 'tags',
        'alias' => 'Tag',
        'conditions' => 'Tag.book_id = Book.id'
    )
);
$this->paginate();
$this->paginate['joins'] = null;

複数のテーブルを JOIN する場合は、同様に連想配列を定義すればよい。 JOIN が 1 つの場合でも、array は二重にしておく必要があるので注意。

(2011/05/27 21:40:49)
10182
プロフィール

Kenz Yamada(山田研二)。1984年生。大阪。ちょっとずつ好きなプログラム作ってます。 好きなものはカメラと旅行。ガジェットや身の回り、ちょっとこだわります。 詳しくは Web mixi で。

Bookmark and Share