開発が捗るLaravelのヘルパー BEST 5
Laravelには様々なHelperが用意されていますが、その中でも特に便利なヘルパーを紹介します。
optionalヘルパー
optional()
ヘルパーを使用すると、オブジェクトのプロパティにアクセスしたり、メソッドを呼び出すことができます。
指定されたオブジェクトが存在しない場合、プロパティとメソッドはエラーを発生させる代わりにnull
を返します。
/**
* Userテーブルに紐ずくAccountテーブルがあります
*
* // User Model
* public function account()
* {
* return $this->belongsTo(Account::class);
* }
*/
// User1はAccount情報が登録されています
$user1 = User::find(1);
$accountId = $user1->account->id; // 123
// User2はアカウント情報が登録されていません
$user2 = User::find(2);
$accountId = $user2->account->id; // PHP Error: Trying to get property of non-object
// optional()を使わない場合
$accountId = $user2->account ? $user2->account->id : null; // null
$accountId = $user2->account->id ?? null; // null
// optional()を使う場合
$accountId = optional($user2->account)->id; // null
optional()
ヘルパーは、存在しない可能性のあるオブジェクトを使用する場合や、使用可能かどうかの判断が必要な場合のEloquentリレーションシップ内でネストされたデータを呼び出す場合に最適です。
data_getヘルパー
data_get()
ヘルパーを使用すると、ドット表記の配列またはオブジェクトから値を取得できます。
これはarray_get()と同様に機能します。キーが見つからない場合、省略可能な第3パラメータを使用してデフォルト値を指定できます。
$array = ['albums' => ['rock' => ['count' => 75]]];
$count = data_get($array, 'albums.rock.count'); // 75
$avgCost = data_get($array, 'albums.rock.avg_cost', 0); // 0
$object->albums->rock->count = 75;
$count = data_get($object, 'albums.rock.count'); // 75
$avgCost = data_get($object, 'albums.rock.avg_cost', 0); // 0
ドット表記法で「ワイルドカード」(*)を利用することもできます。
$array = ['albums' => ['rock' => ['count' => 75], 'punk' => ['count' => 12]]];
$counts = data_get($array, 'albums.*.count'); // [75, 12]
data_get()
ヘルパーを使用すると、同じ構文を使用して配列とオブジェクト内の要素を見つけることができます。このヘルパーの優れた点は、使用する変数の型を確認する必要がないということです。
str_finishヘルパー
str_finish()
ヘルパーは、ある文字列が指定された文字で終わっているかを判定します。もし、指定された文字で終わっていない場合にはその文字が付与されます。
$adjusted = str_finish('this/string', '/');
// this/string/
$adjusted = str_finish('this/string/', '/');
// this/string/
str_finish()
ヘルパーを利用すると、ファイルパスやURLなどを扱う場合に差異を吸収することができます。
str_beforeヘルパー
str_before()
ヘルパーは、ある文字列から指定された文字列より前方の文字列を返却します。
$slice = str_before('This is my name', 'my name');
// 'This is '
$price = str_before('19800円', '円');
// '19800'
str_before()
ヘルパーを利用すると、必要な文字列のトリミングが簡単になります。また、str_after()
ヘルパーも用意されており逆の動作をすることもできます。
tapヘルパー
tap()
ヘルパーは、任意の値とClosure
の2つの引数を受け取ります。値はクロージャに渡され内部処理された後、任意の値として渡せれた値をそのまま返します。
$user = tap(User::first(), function ($user) {
$user->name = 'taylor';
$user->save();
});
Closure
を省略した場合、指定された値に対して任意のメソッドを呼び出すことができます。 この場合にも、呼び出したメソッドの戻り値は、そのメソッドが実際に返却する値に関係なく常にtap()
ヘルパーに渡された値になります。
$user = tap($user)->update([
'name' => $name,
'email' => $email,
]);
たとえば、Eloquent更新メソッドは通常、真偽値を返します。 ただし、更新メソッドの呼び出しをtap()
ヘルパーで連鎖させることで、モデル自体を返すように強制することができます。