CakePHPのfindメソッドにおける条件の指定
カテゴリ:インターン生ブログ
cakephpではデータベースからデータを取得する機能としてfindメソッドがあります。そのfindメソッドを用いて、検索条件を指定することでデータベースから自分の欲しいデータだけを自由に取り出せるようにfindメソッドを使いこなしましょう!
また、弊社ではWebプロモーション成功事例集をまとめた限定資料を無料で配布しています。
Webマーケティングに興味がある方は、下記ページより目を通してみてください。
基本的な使い方
$this->Articles->find()->all();
上記により、まとめてデータを取得することができます。
where
条件の指定を行うために、whereを使用することができます。
$this->Articles->find()->where()->all();
whereの引数には基本の条件を指定することができ、例えば
where([‘name’ => ‘sato’])
を指定することで’name’行が’sato’であるものを検索することができます。
配列に複数の条件を指定することができ、’AND’を用いて全てを満たす条件、’OR’を用いてどちらかを満たす条件を記述することができます。また、それらを組み合わせることによって複雑な検索条件も指定することができます。
LIKE
検索条件に完全に一致しない場合にもデータを取り出すことができるメソッドとしてLIKEがあります。英語で’〜のような’という意味です。nameにsatoが含まれる場合は、’name LIKE’=>’%sato%’ ,nameがsatoで始まるデータは’name LIKE’=>’sato%’で指定することができます。
IN と NOT IN
一つのカラムに対して複数の条件で検索する場合にはIN句を用います。
[‘name IN’=>[‘sato’,’kato’,’saito’]]
上記のように記述することでnameがsato,kato,saitoのデータを取り出すことができます。
また、複数の条件に該当しない場合のデータを取り出すにはNOT IN句を用いて下記のように表せます。
[‘NOT’=>[‘name IN’=>[‘sato’,’kato’,’saito’]]]
またwebで集客する方法を別の記事にまとめております。
詳しく解説しているので、web集客について深く知りたい方は、ぜひこちらもご覧ください。
selectとorder
検索した多数のエンティティをどういう形で受け取るかを指定する機能として’select’と’order’があります。
select
selectメソッドは取り出すフィールドを指定します。
select([ field1, field2, …])
order
検索結果を出力する際に、並び順を指定しないと基本的にIDの順番通りに取り出されます。しかし、特定の順番に並べ替えたい場合はこのメソッドを使用します。
order( [ field名 => ‘Asc’ または ‘Desc’ ] )
引数には基準となるフィールド名に Asc(昇順) または Desc(降順) のいずれかを指定します。
limitとoffset
findによる検索のあと、データの個数が大量である時などは全部まとめて出力する必要がない時もあると思います。そのような時は必要な部分のデータを部分的に取り出すことが必要になります。そのような時に使用する二つのメソッドを紹介します。
limit
limit( 整数 );
取り出すデータの個数を引数に整数で指定します。もしデータの個数の方が指定した個数よりも少ない場合には存在するデータの個数しか出力されないので注意しましょう!
offset
offset( 整数 );
このメソッドは検索したデータの最初からではなく、指定した途中からデータを取り出すためのものです。引数に指定した整数の+1した数が指定されたデータの順番になります。例えば9を引数として入力すると、指定されるのは10番目のデータになります。
組み合わせ
いくつか紹介しましたが全てを組み合わせると下記のような表記になります。
$this->Persons->find()->select()->order()->offset()->limit()->where();
whereによる条件の例
このセクションでは構成したい条件の作り方を例を上げながら説明していきます。where()の引数の中の配列を表していて、AやBのような文字は、’title’ => ‘POST’ のような条件を表します。
A かつ (B または C)
[A ,’OR’=>[B,C]]
これは配列の中に’かつ’の条件であればANDを明記する必要はないので、上記のような記述になります。
(A かつ B)または(C または not D)
[‘OR’=>[‘AND’=>[A,B],’OR’=>[C,’NOT’=>[D] ] ]
少し複雑ですが、このような表記になります。また、AかつBの’AND’を省略して下のようにも表せます。
[‘OR’=>[[A,B],’OR’=>[C,’NOT’=>[D] ] ]
(A または B)かつ (C または not D)
[‘OR’=>[A,B],’AND’=>[‘OR’=>[C ,’NOT’=>[D] ] ] ]
これについて、真ん中のANDが不要に思えるかもしれませんが、連想配列のキーに同じ文字列を指定することができないため、一旦不必要ではあるANDを挟んで表しています。
コツ
僕が訳がわからなくならないように考えているのは、一番大きな枠組みから考えることです。例えば一番最後の例では、(AまたはB) と (Cまたはnot D) を’かつ’ で結んでいるのが一番大きな枠組みであるので最初は’AND’になります。(記述は不要)
おそらくコツを掴めばそこまで深く悩むことはないと思われるので、たくさん練習してデータを取り出すことができるようになってください!
弊社inglowでは、これから広告の運用を考えられている方、あるいはこれから広告代理店に運用をお願いされる方向けに、「業界別Web広告の成功事例」をまとめた資料を無料配布しております。
下記のフォームに入力いただくだけで、無料で資料をダウンロードしていただけます。ぜひご利用下さい。