カテゴリ: CodeIgniter 更新日: 2026/01/27

CodeIgniterのモデル作成ガイド!初心者でもデータベース操作がマスターできる基本手順

CodeIgniterでモデルクラスを作成する基本手順
CodeIgniterでモデルクラスを作成する基本手順

先生と生徒の会話形式で理解しよう

生徒

「CodeIgniterでデータベースからデータを持ってきたいのですが、どうすればいいですか?」

先生

「それには『モデル(Model)』という仕組みを使うのが一番ですよ。」

生徒

「モデル……ですか?難しそうですね。プログラミング初心者でも作れますか?」

先生

「大丈夫です!ルールに沿ってファイルを作るだけで、簡単にデータベースを操作できるようになります。基本から一緒に学んでいきましょう!」

1. モデル(Model)とは何かを理解しよう

1. モデル(Model)とは何かを理解しよう
1. モデル(Model)とは何かを理解しよう

パソコンを触ったことがない方にとって、「モデル」という言葉は聞き馴染みがないかもしれません。簡単に言うと、モデルとは「データベースとのやり取りを専門に担当する係の人」のことです。CodeIgniter(コードイグナイター)というPHPのフレームワークでは、役割分担を明確にするために、このモデルという仕組みを導入しています。

例えば、あなたが図書館で本を探しているとしましょう。自分で本棚をすべて探しまわるのは大変ですよね?そこで、「本を探して持ってくる専門のスタッフ」がいれば、あなたは「〇〇という本をください」と頼むだけで済みます。この「専門スタッフ」がプログラミングの世界でいう「モデル」なのです。データベースという巨大な本棚から、必要なデータを取り出したり、新しいデータを書き込んだりするのがモデルの役割です。

モデルを使うことで、プログラムが整理整頓され、どこに何が書いてあるのかが分かりやすくなります。これは開発効率を上げるだけでなく、ミスを減らすためにも非常に重要な考え方なのです。まずは「データベースのことならモデルにお任せ!」と覚えておきましょう。

2. モデルクラスを作成する準備とルール

2. モデルクラスを作成する準備とルール
2. モデルクラスを作成する準備とルール

モデルを作るには、まず決まった場所にファイルを作成する必要があります。CodeIgniter4の場合、app/Modelsというフォルダの中にファイルを作ります。ここがモデルさんたちの「詰所」のような場所です。ファイルを作成する際には、いくつか大切なルールがあります。

一つ目は「クラス名」です。クラスとは、プログラムの設計図のようなものです。モデルのクラス名は、先頭を大文字にするのが一般的です。例えば、ユーザー情報を扱うなら UserModel.php という名前にします。二つ目は「継承(けいしょう)」です。これは、CodeIgniterがあらかじめ用意してくれている便利な機能を、自分が作るモデルでも使えるように「引き継ぐ」ことを指します。

パソコンの操作に慣れていない方は、ファイル名の一文字目が大文字であることを特に意識してください。小文字にしてしまうと、プログラムが「そんなファイルはありません」と怒ってしまうことがあります。名前の付け方は自由ですが、誰が見ても何をするためのモデルか分かる名前にするのがプロのコツです。例えば「お花」のデータを扱うなら FlowerModel、「注文」なら OrderModel といった具合です。

3. 基本的なモデルの書き方(ソースコード)

3. 基本的なモデルの書き方(ソースコード)
3. 基本的なモデルの書き方(ソースコード)

では、実際にモデルのコードを書いてみましょう。ここでは「ブログの記事」を管理するためのシンプルなモデルを作成する例を紹介します。以下のコードを app/Models/BlogModel.php というファイルに記述します。


namespace App\Models;

use CodeIgniter\Model;

class BlogModel extends Model
{
    // 操作するテーブルの名前を指定します
    protected $table = 'posts';
    
    // データベースの主キー(背番号のようなもの)を指定します
    protected $primaryKey = 'id';

    // 編集を許可する項目の名前を登録します
    protected $allowedFields = ['title', 'content', 'author'];
}

このコードの中で namespace と書かれている部分は、このファイルがどこにあるかを指し示す住所のようなものです。また、extends Model と書くことで、CodeIgniterが持つ「データを検索する」「データを保存する」といった魔法のような機能をこのクラスで使えるようにしています。$table には、実際にデータが保存されているテーブル(表)の名前を書きます。これだけで、データベースとの橋渡しができるようになるのです。

4. データベースから全てのデータを取得する方法

4. データベースから全てのデータを取得する方法
4. データベースから全てのデータを取得する方法

モデルを作ったら、次はそれを使ってデータを取り出してみましょう。最もよく使うのは、保存されているすべてのデータを持ってくる操作です。これを「全件取得」と呼びます。コントローラーという別のファイルから、先ほど作ったモデルを呼び出して命令を出します。

以下のコードは、モデルを使ってデータベースの中身をすべて取り出し、画面に表示させるイメージです。


$blogModel = new \App\Models\BlogModel();

// findAll()は「全部持ってきて!」という魔法の言葉です
$allPosts = $blogModel->findAll();

foreach ($allPosts as $post) {
    echo $post['title'] . '<br>';
}

実行結果は、データベースに登録されている記事のタイトルが並んで表示されます。


初めてのプログラミング
CodeIgniterの使い方
モデルの基本を学ぼう

findAll() という命令一言で、裏側で複雑な命令(SQL)が発行され、データが手元に届きます。自分で長い命令を書かなくて良いのがCodeIgniterの素晴らしいところです。初心者の方は、この「モデルを作って、特定の命令を出す」という流れを何度も繰り返して手に馴染ませていきましょう。これがWebアプリケーション作成の第一歩となります。

5. 特定の条件でデータを検索するテクニック

5. 特定の条件でデータを検索するテクニック
5. 特定の条件でデータを検索するテクニック

全てのデータではなく、「特定の誰かの記事だけ」や「特定の番号の記事だけ」を見つけたい場合もありますよね。これは図書館で特定のキーワードで検索するのと同じです。モデルを使えば、こうした絞り込みも非常に簡単に行うことができます。

例えば、id という背番号が 1 番の記事だけを探したいときは、find() という命令を使います。また、特定の名前の著者が書いた記事だけを探したいときは where() という命令を組み合わせます。これらを使いこなすことで、ユーザーが見たい情報だけを正確に表示できるようになります。


$blogModel = new \App\Models\BlogModel();

// idが2番のデータだけをピンポイントで取得します
$singlePost = $blogModel->find(2);

// 作者が「田中」さんのデータだけを探します
$tanakaPosts = $blogModel->where('author', '田中')->findAll();

検索が成功すると、その条件に合ったデータだけが返ってきます。もし条件に合うものがなければ、空っぽの結果が返ってきます。このように、モデルはただデータを渡すだけでなく、私たちの要望に合わせて賢くデータをフィルタリングしてくれる頼もしい相棒なのです。プログラミング未経験の方は、まずこの「探す」という操作をマスターすることを目指しましょう。

6. データを新しく保存・登録する手順

6. データを新しく保存・登録する手順
6. データを新しく保存・登録する手順

次に、新しいデータをデータベースに保存する方法を学びましょう。これを「挿入(インサート)」と呼びます。例えば、ブログの投稿フォームに書かれた内容を、永久に保存するためにデータベースへ書き込む作業です。モデルを使えば、配列(データのセット)を作って渡すだけで保存が完了します。

保存の際には、先ほどモデルの定義で書いた $allowedFields(許可された項目)が重要になります。ここに登録されていない項目は、安全のために無視される仕組みになっています。これは「知らない人が勝手に変なデータを入れないようにする」ためのセキュリティ対策でもあります。


$blogModel = new \App\Models\BlogModel();

// 保存したいデータを準備します
$newData = [
    'title'   => '新しく書いた記事',
    'content' => '今日はモデルの勉強をしました。',
    'author'  => '佐藤'
];

// save()命令でデータベースに書き込みます
$blogModel->save($newData);

実行した結果、何もエラーが出なければ、データベースに新しい行が追加されています。これであなたのブログに新しい記事が誕生したことになります。パソコン初心者の方は、=> という記号(アロー演算子)に戸惑うかもしれませんが、これは「左側のラベルに右側の内容を入れる」という意味だと考えてください。この書き方に慣れると、複雑な情報もスッキリと整理して扱えるようになります。

7. 既存のデータを更新して書き換える方法

7. 既存のデータを更新して書き換える方法
7. 既存のデータを更新して書き換える方法

一度保存したデータを後から書き換えたいこともありますよね。「誤字を修正したい」「内容を最新にしたい」といった場合です。これを「更新(アップデート)」と呼びます。CodeIgniterのモデルでは、先ほどの save() 命令をそのまま使うことができます。id(背番号)を指定して save() を呼ぶと、モデルは「あ、これは新しいデータじゃなくて、すでにあるデータの書き換えだな」と自動的に判断してくれます。

具体的なコードは以下のようになります。非常にシンプルですよね。


$blogModel = new \App\Models\BlogModel();

// すでにある3番の記事のタイトルを変更したい場合
$updateData = [
    'id'    => 3,
    'title' => '【修正済み】モデルの基本'
];

// idが含まれているので、上書き保存されます
$blogModel->save($updateData);

もし id を入れ忘れると、新しいデータとして保存されてしまうので注意が必要です。更新のポイントは「どのデータを、どう変えるか」を明確に伝えることです。これができるようになると、ユーザーのプロフィール変更機能や、記事の編集機能などが作れるようになります。一歩ずつ、できることが増えていく実感を楽しみましょう。

8. データを削除する時の注意点と方法

8. データを削除する時の注意点と方法
8. データを削除する時の注意点と方法

最後に、不要になったデータを削除する方法です。これを「削除(デリート)」と呼びます。削除は非常に強力な操作で、一度実行すると元に戻すのが難しいため、慎重に行う必要があります。モデルには delete() という命令が用意されています。削除したいデータの id を指定するだけで、データベースから消し去ることができます。

プログラミング未経験の方は、まず「消す前に本当に消していいか確認する」というクセをつけましょう。プログラムは命令された通りに忠実に動くので、「間違えて消しちゃった!」というミスもそのまま実行してしまいます。


$blogModel = new \App\Models\BlogModel();

// idが5番のデータを完全に削除します
$blogModel->delete(5);

このように、モデルクラスを使うことで「取得・検索・保存・更新・削除」という、Webアプリケーションに必要な基本操作がすべて簡単に行えるようになります。これらの頭文字をとって「CRUD(クラッド)」と呼んだりもします。モデルの作り方と使い方の基本をマスターすれば、あなたはもう立派なプログラマーの仲間入りです。まずは自分でモデルを作って、データを動かしてみることから始めてみてくださいね。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)
No.8
Java&Spring記事人気No8
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説