CodeIgniter 4 モデルの基本 ― CRUD操作とデータ操作ロジックの解説
作成日:2025.04.04
本記事では、CodeIgniter 4 のモデルの基本概念から、実際のCRUD(Create, Read, Update, Delete)操作の実装方法までを詳しく解説します。モデルを用いたデータベース操作の簡略化や、ビジネスロジックの分離手法、さらにコントローラとの連携方法など、実践的なコード例を交えながら、効率的なアプリケーション開発に必要な知識を提供します。
モデルとは
CodeIgniterにおけるモデル(Model)は、アプリケーションで使用するデータとその操作を管理するためのPHPクラスです。モデルは、データベースとのやり取りを抽象化し、データの取得、挿入、更新、削除といった操作を簡潔に記述できるよう設計されています
モデルには主に以下のような役割があります。
- データベース操作の簡略化
モデルはデータベーステーブルごとに対応し、CRUD操作(Create, Read, Update, Delete)を行うメソッドを提供します。これにより、コントローラやビューで直接SQLを記述する必要がなくなります。 - ロジックの分離
アプリケーションのビジネスロジックやデータ操作ロジックをコントローラから分離し、コードの再利用性や保守性を向上させます。
※「ロジックの分離」という意味では、データベース操作だけではなく、API等で外部サービスとデータのやり取りをする処理も、モデルに書くべきかなと個人的には考えます。
コントローラからのモデルの呼び出し
以下は、モデル app/Models/SampleModel.php
をコントローラから呼び出して、getSampleDataByKey
というメソッドを実行するサンプルです。
<?php
namespace App\Controllers;
class Sample extends BaseController
{
protected $sampleModel;
public function __construct()
{
$this->sampleModel = model('SampleModel');
}
public function getIndex(int $key)
{
$data = $this->sampleModel->getSampleDataByKey($key);
// Do Something
}
}
基本的なモデルの構成
以下は、「sample」という名前のテーブルを操作するためのモデル app/Models/SampleModel.php
の基本的な構成例です。
<?php
namespace App\Models;
use CodeIgniter\Model;
class SampleModel extends Model
{
// メインで利用するテーブル名
protected $table = 'sample';
// 上記テーブルの主キー
protected $primaryKey = 'sample_key';
// select文等のデフォルトの返り値を array か object で指定
protected $returnType = 'object';
// insert/update文等に配列でまとめて値を渡した時に更新を許可するフィールド
protected $allowedFields = ['sample_name', 'sample_text'];
}
その他の基本設定値に関しては、Using CodeIgniter’s Model — CodeIgniter 4.6.0 documentation を参照。
シンプルな insert 文を実行する
シンプルな insert 文の実行は、モデルに専用のメソッドを用意せずに、コントローラに以下のように記述するだけで実行できます。
$sample_name = '阿部辰也';
$sample_text = '最近、サガ フロンティア2 リマスターにハマってます。';
$row = [
'sample_name' => $sample_name,
'sample_text' => $sample_text,
];
// insert into sample (sample_name, sample_text) values ($sample_name, $sample_text);
$sample_key = $this->sampleModel->insert($row);
この時、配列でまとめて渡して insert
できるのは、 $allowedFields
で設定したフィールドのみです。
また、返り値として主キー $primaryKey
に設定したフィールドの値を取得できます。
シンプルな select 文を実行する
シンプルな select 文の実行も、専用のメソッドを用意する必要なく行なえます。
// select * from sample; (全件取得)
$data = $this->sampleModel->findAll();
$sample_key = 56;
// select * from sample where sample_key = $sample_key; (主キーで検索して一件取得)
$data = $this->sampleModel->find($sample_key);
find
では、$primaryKey
に指定したフィールドに対して検索を行ないます。
返り値は、$returnType
で指定した形式で返ります。
$returnType = 'object';
の場合$data->sample_key
あるいは$data[0]->sample_key
の形式$returnType = 'array';
の場合$data['sample_key']
あるいは$data[0]['sample_key']
の形式
シンプルな update 文を実行する
where
句に主キーだけを指定したシンプルな update
文も、専用のメソッドを用意せずに実行できます。
$sample_key = 23;
$sample_name = '阿部辰也';
$sample_text = '今期の叡王戦、対局者がどっちも推し棋士なので困る。';
$row = [
'sample_name' => $sample_name,
'sample_text' => $sample_text,
];
// update sample set sample_name = $sample_name, sample_text = $sample_text where sample_key = $sample_key;
$this->sampleModel->update($sample_key, $row);
update
の第一引数には主キー、第二引数には更新するデータの配列を渡します。
この時、配列でまとめて渡して update
できるのは、 $allowedFields
で設定したフィールドのみです。
シンプルな delete 文を実行する
where
句に主キーだけを指定したシンプルな delete
文もまた、専用のメソッドを用意せずに実行できます。
$sample_key = 103;
// delete from sample where sample_key = $sample_key;
$this->sampleModel->delete($sample_key);
$primaryKey
に指定したフィールドに合致するレコードの削除を行ないます。
もうちょっと複雑な処理を行なう場合
もうちょっと複雑な処理を行なう場合は、モデル内にメソッドを用意して、専用の処理を書きます。
詳しくは、Query Builder Class — CodeIgniter 4.6.0 documentation 等を参照。

奈良市を拠点に、25年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
CodeIgniter 4 フォーム入力バリデーション入門 ― 基本操作とカスタマイズ手法
2025.04.06
CodeIgniter 4でのフォーム入力値取得とバリデーション処理を、シンプルな実装例を通して解説します。基本的なルール設定から、エラーメッセージの出力、フォームラベルの日本語化やローカライズ方法まで、実践的なテクニックをコンパクトにまとめています。
CodeIgniter4 フォームヘルパー入門 ― HTMLフォーム生成の実践解説
2025.03.25
本記事では、CodeIgniter4 のフォームヘルパーを活用して、HTMLフォームを効率的に生成する手法を解説します。基本的な使い方から、CSRF対策や各種入力要素の生成、バリデーション連携の実践例まで、具体的なコードサンプルを交えながら分かりやすく説明しています。
CodeIgniter 4 URIルーティング入門 ― 手動設定と改善版自動ルーティングの徹底比較
2025.03.22
本記事では、CodeIgniter 4 の URIルーティング機能について、手動ルーティングと自動ルーティング(改善版)の違いや特徴を徹底解説しています。各設定方法の具体例や、ルーティング設定確認の手順を詳しく説明し、開発効率やセキュリティ、柔軟性の観点から最適な選択肢を検討するための情報を提供します。
Windows環境でのCodeIgniter 4.6.0 セットアップガイド―基本設定からセキュリティ対策まで
2025.03.20
CodeIgniter 4.6.0のXAMPP環境へのインストール手順を詳しく解説します。PHPの環境設定から、Composerによるインストール、.envファイルの設定、そしてCSRFやXSS対策などのセキュリティ設定まで、実運用を見据えた導入ガイドをお届けします。