CodeIgniter 4 クエリビルダ入門 ― 実践的なデータ操作とSQL組み立てのテクニック
作成日:2025.05.30
CodeIgniter 4 のクエリビルダの基本から実践的な利用方法までを、具体的なコード例とともに解説します。単純な条件指定から複雑なAND/ORや部分一致検索、IN句など、さまざまな使い方を段階的に学ぶことができます。これにより、SQL文を直接記述せずに柔軟なデータ操作が可能になる手法をご紹介します。
以前書いた記事 CodeIgniter 4 モデルの基本 ― CRUD操作とデータ操作ロジックの解説 で、シンプルなテーブル操作を解説しました。
もうちょっと複雑な処理を行なう場合は、モデル内にメソッドを用意して、専用の処理を書きます。その際に便利なのが、クエリビルダです。
クエリビルダを使ったモデルの実装例
以下のコードは user_key をキーに、chatlog_key の昇順でデータを取ってくる処理のサンプルです。
public function getChatlogByUserkey(int $user_key)
{
$builder = $this->db->table($this->table);
$builder->where('user_key', $user_key);
$builder->orderBy('chatlog_key', 'ASC');
return $builder->get()->getResult();
}
このように、クエリビルダを使うことで、SQL文を直接書かずに、データベース操作が可能です。
条件指定
$builder->where()
WEHRE句の指定は、where() メソッドを使用します。以下のように、条件を指定してデータを取得できます。
$builder = $this->db->table('sample');
$builder->where('sample_key', 1);
$results = $builder->get()->getResult();
上記の例では、sample_key が1のデータを取得しています。
演算子を指定したい場合は、以下のような感じ。
$builder->where('sample_key >', 1); // sample_key が1より大きい
$builder->where('sample_key <=', 10); // sample_key が10以下
$builder->where('sample_key !=', 5); // sample_key が5以外
複数の条件をANDで指定したい場合は、where() メソッドを複数回呼び出すことができます。
$builder = $this->db->table('sample');
$builder->where('sample_key', 1);
$builder->where('sample_name', 'サンプル名');
$results = $builder->get()->getResult();
上記の例では、sample_key が1かつ sample_name が「サンプル名」のデータを取得しています。
$builder->orWhere()
OR条件を指定する場合は、orWhere() メソッドを使用します。
$builder->where('sample_key', 1);
$builder->orWhere('sample_key', 2);
上記の例では、sample_key が1または2のデータを取得しています。
$builder->whereIn()
特定の値のリストに対してIN条件を指定する場合は、whereIn() メソッドを使用します。
$key_list = [1, 2, 3];
$builder->whereIn('sample_key', $key_list);
上記の例では、sample_key が1、2、3のいずれかに該当するデータを取得しています。
$builder->orWhereIn()
複数の条件をORで指定する場合は、orWhereIn() メソッドを使用します。
$key_list = [1, 2, 3];
$builder->where('sample_name', 'サンプル名');
$builder->orWhereIn('sample_key', $key_list);
上記の例では、sample_name が「サンプル名」であるか、sample_key が1、2、3のいずれかに該当するデータを取得しています。
$builder->whereNotIn()
特定の値のリストに対してNOT IN条件を指定する場合は、whereNotIn() メソッドを使用します。
$key_list = [1, 2, 3];
$builder->whereNotIn('sample_key', $key_list);
上記の例では、sample_key が1、2、3のいずれにも該当しないデータを取得しています。
$builder->orWhereNotIn()
複数の条件をORで指定する場合は、orWhereNotIn() メソッドを使用します。
$key_list = [1, 2, 3];
$builder->where('sample_name', 'サンプル名');
$builder->orWhereNotIn('sample_key', $key_list);
上記の例では、sample_name が「サンプル名」であるか、sample_key が1、2、3のいずれにも該当しないデータを取得しています。
$builder->like()
文字列の部分一致検索を行う場合は、like() メソッドを使用します。
$builder->like('sample_name', 'サンプル');
上記の例では、sample_name に「サンプル」という文字列が含まれるデータを取得しています。
※WHERE `sample_name` LIKE '%サンプル%' のようなSQL文が実行されます。
前方一致または後方一致を指定する場合は、以下のようにします。
$builder->like('sample_name', 'サンプル', 'after'); // WHERE `sample_name` LIKE 'サンプル%'
$builder->like('sample_name', 'サンプル', 'before'); // WHERE `sample_name` LIKE '%サンプル'
上記の例では、sample_name が「サンプル」で始まる、または「サンプル」で終わるデータを取得しています。
like()メソッドも複数回呼び出すことで、複数の条件をAND指定できます。
$builder->like('sample_name', 'サンプル');
$builder->like('sample_text', 'テキスト');
上記の例では、sample_name に「サンプル」という文字列が含まれ、かつ sample_text に「テキスト」という文字列が含まれるデータを取得しています。
$builder->orLike()
文字列の部分一致検索でOR条件を指定する場合は、orLike() メソッドを使用します。
$builder->like('sample_name', 'サンプル');
$builder->orLike('sample_text', 'テキスト');
上記の例では、sample_name に「サンプル」という文字列が含まれるか、sample_text に「テキスト」という文字列が含まれるデータを取得しています。
$builder->notLike()
文字列の部分一致検索でNOT LIKE条件を指定する場合は、notLike() メソッドを使用します。
$builder->notLike('sample_name', 'サンプル');
上記の例では、sample_name に「サンプル」という文字列が含まれないデータを取得しています。
$builder->orNotLike()
文字列の部分一致検索でOR NOT LIKE条件を指定する場合は、orNotLike() メソッドを使用します。
$builder->like('sample_name', 'サンプル');
$builder->orNotLike('sample_text', 'テキスト');
上記の例では、sample_name に「サンプル」という文字列が含まれるか、sample_text に「テキスト」という文字列が含まれないデータを取得しています。
データの取得
SELECT文によるデータの取得の際に使用するクエリビルダ。
$builder->get()
データを取得する際に使用します。以下のように、テーブル名を指定して、get() メソッドを呼び出すことで、データを取得できます。
$builder = $this->db->table('sample');
$results = $builder->get()->getResult();
上記の例では、sample テーブルから全てのデータを取得しています。
取得する件数を指定する(LIMIT, OFFSET句の指定)場合、以下のようにします。
$builder = $this->db->table('sample');
$results = $builder->get(20,10)->getResult();
上記の例では、sample テーブルから20件のデータを、10件目から取得しています。
※ SELECT * FROM sample LIMIT 20 , 10; のようなSQL文が実行されます。
OFFSETなしで指定するなら、
$builder = $this->db->table('sample');
$results = $builder->get(20)->getResult();
でOK。
データの更新
UPDATE文によるデータの更新の際に使用するクエリビルダ。
$builder->update()
データを更新する際に使用します。以下のように、テーブル名を指定して、update() メソッドを呼び出すことで、データを更新できます。
$data = [
'sample_key' => 1,
'sample_name' => '新しいサンプル名',
'sample_text' => '更新されたサンプルテキスト',
];
$builder = $this->db->table('sample');
$builder->where('sample_key', $data['sample_key']);
$builder->update($data);
上記の例では、sample_key が1のデータを、配列で指定したデータに更新しています。
その他いろいろ
他にもクエリビルダには様々なメソッドが用意されています。
詳しくはQuery Builder Class — CodeIgniter 4.6.1 documentationなどを参照してください。
クエリビルダでは、JOIN や GROUP BY、HAVING などの複雑なクエリも簡単に組み立てることができます。
これらの機能を活用することで、より複雑なデータ操作や集計が可能になります。
CodeIgniterを活用したWebアプリ開発で複雑なデータ操作を実現したい方へ
本記事でご説明したクエリビルダを用いたモデル内での複雑なデータ操作は、SQL文を直接書かずに効率的なDB処理を実現するための強力なテクニックです。
例えば、ユーザーごとのログ取得や、条件分岐・並び替え・件数制限を含む柔軟なデータ取得、JOIN・GROUP BY・HAVINGを活用した高度なレポート生成など、CodeIgniterを活用したWebアプリ開発全体に応用できます。お気軽にご相談ください。
奈良市を拠点に、26年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
CodeIgniter 4 フォーム入力バリデーション入門 ― 基本操作とカスタマイズ手法
2025.04.06
CodeIgniter 4でのフォーム入力値取得とバリデーション処理を、シンプルな実装例を通して解説します。基本的なルール設定から、エラーメッセージの出力、フォームラベルの日本語化やローカライズ方法まで、実践的なテクニックをコンパクトにまとめています。
CodeIgniter 4 モデルの基本 ― CRUD操作とデータ操作ロジックの解説
2025.04.04
本記事では、CodeIgniter 4 のモデルの基本概念から、実際のCRUD(Create, Read, Update, Delete)操作の実装方法までを詳しく解説します。モデルを用いたデータベース操作の簡略化や、ビジネスロジックの分離手法、さらにコントローラとの連携方法など、実践的なコード例を交えながら、効率的なアプリケーション開発に必要な知識を提供します。
CodeIgniter4 フォームヘルパー入門 ― HTMLフォーム生成の実践解説
2025.03.25
本記事では、CodeIgniter4 のフォームヘルパーを活用して、HTMLフォームを効率的に生成する手法を解説します。基本的な使い方から、CSRF対策や各種入力要素の生成、バリデーション連携の実践例まで、具体的なコードサンプルを交えながら分かりやすく説明しています。
CodeIgniter 4 URIルーティング入門 ― 手動設定と改善版自動ルーティングの徹底比較
2025.03.22
本記事では、CodeIgniter 4 の URIルーティング機能について、手動ルーティングと自動ルーティング(改善版)の違いや特徴を徹底解説しています。各設定方法の具体例や、ルーティング設定確認の手順を詳しく説明し、開発効率やセキュリティ、柔軟性の観点から最適な選択肢を検討するための情報を提供します。