2008年08月12日

[cakePHP1.2] paginateで条件文にLIKE,ORを指定する方法

cakePHP1.2でページング処理をするとき、取得するデータの条件にor条件やLIKEを指定する方法。


$skey = $this->data['Search']['keyword'];

$this->Link->recursive = 0;

$this->paginate = array("conditions" => array("or" => array("Link.hoge LIKE" => "%".$skey."%",
"Link.hoge2 LIKE" => "%".$skey."%",
"Link.hoge3 LIKE" => "%".$skey."%",
"Link.hoge4 LIKE" => "%".$skey."%")),
"limit" => 10, "order" => array("Link.id" => "asc"));

$this->set('Links', $this->paginate());


・"or"条件を上位階層の配列に入れ、下位階層の配列に条件を指定する。
・"LIKE"条件は、"フィールド名 LIKE"と指定する。
 "Link.hoge2" => "LIKE %".$skey."%" ではないので注意。


上記のSQL展開は下記のようになる。
SELECT `Link`.`id`, `Link`.`hoge`, `Link`.`hoge2`, `Link`.`hoge3`, `Link`.`hoge4`,
`Link`.`created`, `Link`.`modified`
FROM `links` AS `Link`
WHERE ((`Link`.`hoge` LIKE '%HOGEHOGE%') OR
(`Link`.`hoge2` LIKE '%HOGEHOGE%') OR
(`Link`.`hoge3` LIKE '%HOGEHOGE%') OR
(`Link`.`hoge4` LIKE '%HOGEHOGE%'))
ORDER BY `Link`.`id` asc LIMIT 10



参考:CakePHP ポケットリファレンス (Pocket Reference)
 P.83「検索時の条件を指定する」
 P.155「ページングを考慮したモデルデータを取得する」


CakePHP ポケットリファレンス (Pocket Reference)
株式会社ブルーオーシャン 岡田 佳典
技術評論社
売り上げランキング: 99659
おすすめ度の平均: 5.0
5 いま発売されているcake系書籍で一番良いです


タグ:cakephp
posted by surviver at 01:01 | Comment(0) | TrackBack(0) | cakePHP
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。