[Laravel] 5.8.3がリリースされました
laravel/frameworkのバージョン5.8.3がリリースされました。追加された機能について確認します。
Collection
クラスにcountBy()
メソッドが追加されました
Collection
内の配列を値毎にカウントできるようになりました。
collect([ 1, 2, 2, 2, 3 ])->countBy(); // == collect([ 1 => 1, 2 => 3, 3 => 1 ])
また、コールバックに関数を指定することでカウント方法をカスタマイズできます。
collect([ '[email protected]', '[email protected]', '[email protected]' ])
->countBy(function ($email) {
return substr(strrchr($email, "@"), 1);
}); // == collect([ 'gmail.com' => 2, 'yahoo.fr' => 1 ])
EloquentUserProvider
クラスにnewModelQuery()
メソッドが追加されました
ユーザーの認証時に仕様するEloquentUserProvider
ですが、アプリケーション独自の認証方法を実装する際には各インターフェイスの実装が必要でした。
EloquentUserProvider
継承したクラスでnewModelQuery()
メソッドをカスタマイズすることで拡張が容易になります。
admin
ロールが指定されたユーザーの認証を利用する例:
<?php
namespace App\Extensions;
use Illuminate\Auth\EloquentUserProvider;
class MyEloquentAdminProvider extends EloquentUserProvider
{
protected function modelQuery($model = null)
{
return parent::newModelQuery($model)->where('role', 'admin');
}
}
StartSession
クラスにsaveSession()
メソッドが追加されました
ミドルウェア内でSession
情報を扱う場合にhandle()
メソッドをオーバーライドすることなく、Session
情報のみを扱う用途で使用します。
/**
* Save the session data to storage.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function saveSession($request)
{
if ($request->route()->named('statamic.cp.session.timeout')) {
return;
}
session()->put('last_activity', now()->timestamp);
parent::saveSession($request);
}
Model
クラスのbelongsToMany()
メソッドの2つ目の引数にModel/Pivot
クラスを渡せるようになりました
belongsToMany
を利用する場合は関連テーブル名をハードコーディングし、using()
メソッドを使って中間テーブルを指定する必要がありました。
Model::getTable()
を使い動的に取得する方法もありましたが、Pivot
モデルを直接渡すことでシンプルに記述できるようになりました。
return $this->belongsToMany(Profile::class, CustomerProfile::class);
詳しい変更については以下を確認してください。