スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

cakephpでUNIONする方法

CakePHPでUNIONする方法をメモ。

1.新しくモデルを作成する

<?php
class Search extends AppModel{
public $useTable = false;

public $base_sql = "(select name from test1 where name=?) union (select name from test2 where name=?)";

public $bind_param = array('word1', 'word2');

/**
* UNION用paginateをオーバーライド
*/
public function paginate($conditions=null,$fields=null,$order=null,$limit=3,$page=1,$recursive=null,$extra=array()){
if($page==0){$page = 1;}
$recursive = -1;
$offset = $page * $limit - $limit;
$order_sql = '';
if(!empty($order)) {
$order_sql = 'order by ';
$cnt=0;
foreach($order as $key => $val) {
if($cnt>0) $order_sql .= ',';
$order_sql .= $key . ' ' . $val;
$cnt++;
}
}

$sql = $this->base_sql . ' ' . $order_sql .' limit ' . $limit . ' offset ' . $offset;
return $this->query($sql, $this->bind_param);
}

/**
* UNION用paginateCountをオーバーライド
*/
public function paginateCount($conditions=null,$recursive=0,$extra=array()){
$this->recursive = $recursive;
$results = $this->query($this->base_sql, $this->bind_param);
return count($results);
}
}


2.コントローラーで呼び出す

<?php

class SearchesController extends AppController{

public function index(){

$this->paginate = array(
'limit'=>3,
'order'=>array('name'=>'desc'),
);

$this->set('searches',$this->paginate('Search'));

}

}



※ 条件とかは、必要に応じて $this->paginate とかに設定しとけばOK

参考サイト
任意のSQLでPaginateを利用
[CakePHP]UNIONして取得したデータをページングする方法
スポンサーサイト

プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。