🔥
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