[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);

詳しい変更については以下を確認してください。

Release v5.8.3 · laravel/framework · GitHub

© Xzxzyzyz