Laravelが8.23にバージョンアップし、クエリビルダにsoleメソッドが追加されました。
これは、テーブルの中に1個だけマッチするデータが有るときに、取り出してくれるメソッド。
逆にいうと、マッチするデータがないときはエラー、複数ある場合は「例外」となります。
似たようなデータ取得メソッドにはgetやfirstがありますが、違いを含めて解説します。
Laravel8.23 バージョンアップ soleメソッドの使い方
まずはsoleメソッドを使ってデータベースから値を取り出してみます。
たとえば、データベーステーブルに次の値が入っているとします。

データベースに値が存在する場合としない場合で、どのような結果になるか見てみます。
*なお、ルート設定はモデルファイルの設定は省略してコードをご紹介します。
①条件にあう値がひとつだけ存在する場合
このデータの中から、「summaryに茶色が含まれているデータのタイトルを表示したい」としましょう。


つまり、「くま」が表示されるはず。
コントローラーには、次のように入れます。
<?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'));
}
}
ビューには、次のようにいれます。
どの動物でしょう?<br>
{{$result->title}}
するとブラウザには下記の通り表示されます。

②条件にあう値が複数の場合
次に、条件にあう値が複数の場合はどうなるか。
たとえば、「summaryに白色が含まれているデータのタイトルを表示したい」としましょう。
コントローラーに次のようにいれます。
<?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に赤色が含まれているデータのタイトルを表示したい」としましょう。
コントローラーに次のようにいれます。
<?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のプロジェクトを新規作成すると、最新版がインストールされます。
今の自分のバージョンを知りたい場合には、プロジェクトをインストールしたディレクトリで、下記コマンドを実行してみてくださいね。
PS C:\xampp\htdocs\laravel\versiontest> php artisan --version




コメント