モデル(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 = ?;」が格納されます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Laravel

前の記事

課題2020-11