モデル(Model)を使う
Laravelでは、データベースへのアクセス(SELECTやINSERT,UPDATE,DELETE)をモデル(Model)を介して行いことができます。
例えば、「members」というテーブルがあった場合、このテーブルへアクセスするためのモデルは「Member」モデルになります。
モデルの作り方は次の通りです。
php artisan make:model モデル名
php artisan make:model Member
テーブル名とモデル名の関係ですが、テーブル名は扱うデータの複数形、モデル名はデータの単数形にします。
また、モデルを使う場合、対象のテーブルにかならず次の列が存在している必要があります。
- id (serial型) 主キーになるID
- created_at (timestamp型) レコードの作成日時
- updated_at(timestamp型) レコードの更新日時
作ったモデルファイルは、「app」フォルダに格納されています。
今回のMemberモデルであれば、「app/Member.php」がMemberモデルファイルです。
このモデルファイルをコントローラ内で使えるようにするために、コントローラファイルの上部に次のuse文を書いておきます。
use App\Member;membersテーブルからSELECTする
$members = Member::get();
これは、
SELECT * FROM members;
と同義です。
membersテーブルにINSERTする
$member = new Member;
$member->name = '山田';
$member->save();
これは、
INSERT INTO members (name, created_at, updated_at) VALUES(?, ?, ?);
と同義です。
membersテーブルからIDを指定して1レコードをSELECTする
$member = Member::find(1);
これは、
SELECT * FROM members WHERE id = ?;
と同義です。
membersテーブルの1レコードをUPDATEする
$member = Member::find(1);
$member->name = '佐藤';
$member->save();
これは、
UPDATE members SET name = ?, updated_at = ? WHERE id = ?;
と同義です。
membersテーブルの1レコードをDELETEする
$member = Member::find(1);
$member->delete();
これは、
DELETE FROM members WHERE id = ?;
と同義です。
WHERE句を使う
$members = Member::where('name','=','山田')->get();これは、
SELECT * FROM members WHERE name = ‘山田’;
と同義です。
内部結合する
$members = Member::join('groups','members.group_id','=','groups.id')->get();これは、
SELECT * FROM members INNER JOIN groups ON members.group_id = groups.id;
と同義です。
SELECTする列を指定する
$members = Member::select([
'id',
'name'
])->get();これは、
SELECT id, name FROM members;
と同義です。
次のようにasを指定して列に別名を指定することもできます。
$members = Member::select([
'members.id',
'members.name',
'groups.name as group_name'
])->join('groups','members.group_id','=','groups.id')->get();これは、
SELECT
members.id, members.name, groups.name as group_name
FROM
members INNER JOIN groups ON members.group_id = groups.id;
と同義です。
ORDER BY句を使う
$members = Member::orderBy('id','desc')->get();LIMIT句,OFFSET句を使う
$members == Member::orderBy('id','desc')->offset(10)->limit(10)->get();クエリビルダー
$query = Member::query();
$query->where('name','=','山田');
$members = $query->get();これは、上記の「WHERE句を使う」の例と同義です。
モデルが生成するSQLを確認する
$query = Member::query();
$query->where('name','=','山田');
$sql= $query->toSql();$sqlには、「select * from members where name = ?;」が格納されます。
