🔥
CodeIgniter4のCodeIgniter\Model (1)CRUDメソッド
CodeIgniter Advent Calendar 2021
CodeIgniter4の CodeIgniter\Model の使い方をみてみましょう。
目次
- CodeIgniter4のCodeIgniter\Model (1)CRUDメソッド
- CodeIgniter4のCodeIgniter\Model (2)Entityクラスの利用
- CodeIgniter4のCodeIgniter\Model (3)モデル内でのバリデーション
CodeIgniter\Model とは?
CodeIgniter4に標準で含まれているモデルクラスです。以下のような機能があります。
- 自動データベース接続
- 基本的なCRUDメソッド
- モデル内でのバリデーション
- 自動ページネーション
- 論理削除
モデルの作成
CodeIgniter\Model を継承したモデルクラスを作成します。
app/Models/NewsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
    protected $table = 'news';
    protected $allowedFields = ['title', 'slug', 'body'];
}
プロパティにはテーブル名($table)と更新できるカラムのリスト($allowedFields)を設定します。テーブルの定義は、チュートリアルを参照してください。
プライマリーキーはカラム名が id の自動インクリメントがデフォルトです。
異なる場合は、$primaryKey にカラム名を、$useAutoIncrement に false を設定します。
なお、複合プライマリーキーには対応していません。
基本的なCRUDメソッド
データの検索
find()
プライマリーキーでレコードを検索します。
$newsItem = $newsModel->find(1);
array(4) {
  ["id"]=>
  string(1) "1"
  ["title"]=>
  string(13) "Elvis sighted"
  ["slug"]=>
  string(13) "elvis-sighted"
  ["body"]=>
  string(95) "Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app."
}
配列を渡すことで複数のレコードを検索できます。
$newsItems = $newsModel->find([1, 2, 3]);
array(3) {
  [0]=>
  array(4) {
    ["id"]=>
    string(1) "1"
    ["title"]=>
    string(13) "Elvis sighted"
    ["slug"]=>
    string(13) "elvis-sighted"
    ["body"]=>
    string(95) "Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app."
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(1) "2"
    ["title"]=>
    string(16) "Say it isn't so!"
    ["slug"]=>
    string(14) "say-it-isnt-so"
    ["body"]=>
    string(64) "Scientists conclude that some programmers have a sense of humor."
  }
  [2]=>
  array(4) {
    ["id"]=>
    string(1) "3"
    ["title"]=>
    string(18) "Caffeination, Yes!"
    ["slug"]=>
    string(16) "caffeination-yes"
    ["body"]=>
    string(74) "World's largest coffee shop open onsite nested coffee shop for staff only."
  }
}
findAll()
全レコードを検索します。
$newsItems = $newsModel->findAll();
WHERE句を指定して検索します。
$newsItems = $newsModel->where('id', 1)->findAll();
LIMITとOFFSETを指定して検索します。
$newsItems = $newsModel->findAll($limit, $offset);
データの保存
insert()
レコードを挿入します。
$data = [
    'title' => '記事タイトル',
    'slug'  => 'news-title',
    'body'  => '記事の本文です。',
];
$newsModel->insert($data);
update()
プライマリーキーを指定してレコードを更新します。
$data = [
    'title' => '更新した記事タイトル',
    'slug'  => 'updated-news-title',
    'body'  => '更新した記事の本文です。',
];
$newsModel->update(1, $data);
$data = [
    'body' => 'この記事は削除されました。',
];
$newsModel->update([1, 2, 3], $data);
WHERE句を指定してレコードを更新します。
$data = [
    'body' => 'この記事は削除されました。',
];
$newsModel->whereIn('id', [1, 2, 3])->set($data)->update();
save()
プライマリーキーがない場合は挿入します。
$data = [
    'title' => '新しい記事タイトル',
    'slug'  => 'new-news-title',
    'body'  => '新しい記事の本文です。',
];
$newsModel->save($data);
プライマリーキーがある場合は更新します。
$data = [
    'id'    => 3,
    'title' => '更新した記事タイトル',
    'slug'  => 'updated-news-title',
    'body'  => '更新した記事の本文です。',
];
$newsModel->save($data);
データの削除
delete()
プライマリーキーを指定してレコードを削除します。
$newsModel->delete(1);
$newsModel->delete([1, 2, 3]);
WHERE句を指定してレコードを削除します。
$newsModel->where('id', 1)->delete();
CodeIgniter4のCodeIgniter\Model (2)Entityクラスの利用
へ続く。



Discussion