Laravelが8.23にバージョンアップし、クエリビルダにsoleメソッドが追加されました。
これは、テーブルの中に1個だけマッチするデータが有るときに、取り出してくれるメソッド。
逆にいうと、マッチするデータがないときはエラー、複数ある場合は「例外」となります。
似たようなデータ取得メソッドにはgetやfirstがありますが、違いを含めて解説します。
Laravel8.23 バージョンアップ soleメソッドの使い方
まずはsoleメソッドを使ってデータベースから値を取り出してみます。
たとえば、データベーステーブルに次の値が入っているとします。
データベースに値が存在する場合としない場合で、どのような結果になるか見てみます。
*なお、ルート設定はモデルファイルの設定は省略してコードをご紹介します。
①条件にあう値がひとつだけ存在する場合
このデータの中から、「summaryに茶色が含まれているデータのタイトルを表示したい」としましょう。
つまり、「くま」が表示されるはず。
コントローラーには、次のように入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; class TestController extends Controller { public function test(){ $result=Book::where('summary', 'like', '%茶色%')->sole(); return view('test', compact('result')); } } |
ビューには、次のようにいれます。
1 2 |
どの動物でしょう?<br> {{$result->title}} |
するとブラウザには下記の通り表示されます。
②条件にあう値が複数の場合
次に、条件にあう値が複数の場合はどうなるか。
たとえば、「summaryに白色が含まれているデータのタイトルを表示したい」としましょう。
コントローラーに次のようにいれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; class TestController extends Controller { public function test(){ $result=Book::where('summary', 'like', '白%')->sole(); return view('test', compact('result')); } } |
ビューファイルは先ほどと同じです。
結果は、次のように MultipleRecordsFoundException (複数のレコードが見つかった例外)と表示されます。
③条件にあう値がゼロの場合
次に、条件にあう値がゼロの場合はどうなるか。
たとえば、「summaryに赤色が含まれているデータのタイトルを表示したい」としましょう。
コントローラーに次のようにいれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; class TestController extends Controller { public function test(){ $result=Book::where('summary', 'like', '%赤色%')->sole(); return view('test', compact('result')); } } |
ビューファイルは先ほどと同じです。
結果は、次のように404Not Foundと表示されます。
ほんとうに条件にあうデータが1個だけしか存在しない場合にしか、データを取得しないってことが分かりました。
クエリビルダメソッド get, first, soleメソッドの違い
なお、よく使われるget や first との違いは、次のとおり。
【クエリビルダ get, first, sole の比較】
first | 配列の中の条件にあう一番最初の要素を取り出す |
get | 配列の中の条件にあう最初の要素を取り出す |
sole | 配列の中の条件にあう要素が1個だけのときに取り出す |
状況に応じて使い分けていきましょう。
なお、よく使うLaravelのデータ取得メソッドは、こちらにまとめています。
さいごに
今回のアップデートについて、公式ページはこちら。
Laravelのプロジェクトを新規作成すると、最新版がインストールされます。
今の自分のバージョンを知りたい場合には、プロジェクトをインストールしたディレクトリで、下記コマンドを実行してみてくださいね。
1 |
PS C:\xampp\htdocs\laravel\versiontest> php artisan --version |