この記事では、Laravelで用意されているEloquentのメソッドの返り値をよく使うものを中心に紹介します。
返り値をうまく使うことで無駄なコードを減らせたりエラー回避に繋がりやすいです。
Laravel始めたばかりでEloquentのよく使うメソッドとその返り値がどんなものになるか気になる方はぜひ参考にしてみてください。
この記事を読むメリット
- Eloquentでよく目にする、使用するメソッドが知れる
- メソッドの返り値がどんなものになるか理解できる
LaravelのEloquentでよく使うメソッド紹介
まずはEloquentでよく使うメソッドを簡単に紹介します。
私が業務でよく見るものと使用するものをピックアップしました。
大体以下のものになるかなと思います。
メソッド名 | 概要 | 返り値 |
---|---|---|
find() | データ取得 | Modelオブジェクト |
first() | データ取得 | Modelオブジェクト |
get() | データ取得 | Collectionクラス |
all() | データ取得 | Collectionクラス |
create() | 新規レコード追加 | 新規作成レコード |
save() | データ保存 | boolean |
update() | データ更新 | 変更があったレコード数 |
delete() | データ削除 | 削除したレコード数 |
一通りのデータに関する操作に利用されるメソッドになっています。
この後の章から、具体的なコードをもとに返り値がどうなるか紹介していきます。
データ取得には2週類の返り値パターンがある
まず初めは「find()」「first()」「get()」「all()」の4種類についてです。
こちら4種類のメソッドは全てデータ取得をする際に利用されるものです。
しかし返り値は2種類あってModelオブジェクトもしくはCollectionクラスになります。
この違いを理解しておくことが重要です。
私はここを理解できずエラー地獄にハマった経験があります。
この4つのメソッドについては別記事で詳しく解説しているのでよかったら参考にしてみてください。
create()の返り値
続いてcreate()の返り値についてです。
create()はデータを新規作成するメソッドです。
このメソッドの返り値は、「作成された新規レコード」です。
public function createSample()
{
$user = User::create([
'name' => 'Sample User',
'email' => 'testoio@sample.com',
'password' => bcrypt('password'),]);
return view('create-sample')
->with('user', $user);
}
create()で新規ユーザーを作成しています。
返り値である$userの中身は以下のようになります。
{
"name": "Sample User",
"email": "testoio@sample.com",
"updated_at": "2024-07-10T23:22:35.000000Z",
"created_at": "2024-07-10T23:22:35.000000Z",
"id": 14
}
このように新規作成されたユーザーのレコードが返ってきます。
save()の返り値
続いてsave()の返り値についてです。
save()はデータを保存するメソッドです。
このメソッドの返り値は、「boolean」です。
save()を使って返り値を見てます。
public function saveSample()
{
$user = User::find(1);
$user->name = 'Updated Name';
$updatedReturn = $user->save();
return $updatedReturn;
// $updateedReturn = 1
}
$savedReturnの中身はこのようにtrueかfalseで返ってきます。
複数レコードの一括登録にはinsert()が便利
新規レコードの追加にはsave()や先ほどのcreate()を使います。
しかし、複数レコードの一括追加に便利なinsert()メソッドも存在します。
insert()を使うと、以下のように一括でレコード追加することができます。
save()やcreate()ではこのような方法は取ることができず、ループ処理を使って行う必要があります。
しかし、insert()を使う際には注意点もあります。
以下記事で詳しく解説していますので気になる方は参考にしてください。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!
update()の返り値
続いてはupdate()の返り値についてです。
update()はデータを更新するメソッドです。
このメソッドの返り値は、「変更があったレコード数」です。
以下がそのサンプルです。
public function updateSample()
{
// update()を使って全てのユーザーのnameを'Updated Name'に更新
$updatedReturn = User::where('id', '>', 0)->update(['name' => 'Updated Name']);
return $updatedReturn;
// $updateedReturn = 2
}
save()とupdate()の挙動の違い
ちなみにsave()とupdate()はどちらもデータを更新、保存する際に使用するメソッドですが、その2つのメソッドの違いについて詳しく知りたい方は以下記事を参考にしてみてください。
一括更新の際にもupdate()が有効
さらに以下のように対象のデータを一括して更新したい際にもupdate()が使えます。
public function updateUserStatus()
{
// 2024/07/30以降に作成されたユーザーのステータスをまとめて更新
User::where('created_at' >= Carbon::parse('2024-07-30 00:00:00'))
->update(['status' => 1]);
}
この時、「2024/07/30以降に作成されたユーザー」が複数存在していた際にも一括で更新することができます。
しかし、この方法ではクエリビルダのupdate()メソッドになりますので$fillableによるカラム更新制御が適用されません。
セキュリティ的に問題ないことを確認して使用するようにしましょう。
fillableについての詳しい解説は以下記事で行なっております。
fillableの必要性と注意点などをまとめています。
delete()の返り値
最後はdelete()の返り値についてです。
delete()はデータを削除するメソッドです。
このメソッドの返り値は、「削除したレコード数」です。
ユーザーの数が5件あるusersテーブルを例にしてみます。
mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
| 5 |
+----------+
1 row in set (0.07 sec)
delete()を使ってidが1より大きいユーザーデータを削除する関数が以下になります。
public function deleteSample()
{
$deletedReturn = User::where('id', '>', 1)->delete();
return $deletedReturn;
// $deletedReturn = 4
}
4件のレコードが削除されるので返り値は4になります。
返り値をうまく使って効率的に開発する
いかがだったでしょうか。
今までこれらのメソッドの返り値を特に気にしたことがありませんでした。
返り値がどんなものになるか把握しておくと、無駄な処理を省ける可能性もあるなと思いました。
「何件削除しました」「何件更新しました」などと返り値を使えるケースもあるのではないでしょうか。
正しく理解しておくといつか使える時がくる、と思います!