[Laravel] 6.7.0がリリースされました

laravel/frameworkのバージョン6.7.0がリリースされました。追加された機能について確認します。

HasTimestampsトレイトにgetQualifiedCreatedAtColumn()getQualifiedUpdatedAtColumn()メソッドが追加されました (#30792)

モデルで利用している追加日時更新日時のテーブ名、カラム名が取得できるようになりました。

$user = new User;

$user->getQualifiedCreatedAtColumn() // users.created_at
$user->getQualifiedUpdatedAtColumn() // users.updated_at

Exceptions\HandlerクラスにexceptionContext()メソッドが追加されました (#30780)

このメソッドを実装することでエラー発生時のログデータを拡張する際に、report()をオーバーライドの必要がなくなります。

throw (new CustomException())->setCustomProperty('foo');

// App/Exceptions/Handler.php
protected function exceptionContext(Exception $e)
{
    if ($e instanceof CustomException) {
        return ['custom_context' => $e->getCustomProperty()];
    }
}

メールドライバにPostmarkを利用している場合に問題発生時に例外がスローされるようになりました (#30799, @4320b82)

HasRelationshipsクラスにwithoutRelations()unsetRelations()メソッドが追加されました (#30802)

例えばJobをキューイングする際に、リレーション情報を除いたシンプルなエンティティーのみをシリアライズしてキューに入れることができます。

protected $podcast;

public function __construct(Podcast $podcast)
{
    $this->podcast = $podcast->withoutRelations();
}

ResourceCollectionクラスにpreserveQueryParameters()メソッドが追加されました (#30745, @e92a708)

ResourceCollectionクラスを利用してページネーションのApiレスポンスを作成する場合に、レスポンスの内容にクエリパラメーターを保持できるようになりました。

Route::get('/', function () {
    $collection = collect([new Post(['id' => 2, 'title' => 'Laravel Nova'])]);
    $paginator = new LengthAwarePaginator(
        $collection, 3, 1, 2
    );

    return PostCollectionResource::make($paginator)->withQuery(['author' => 'Taylor']);
});

$response = $this->withoutExceptionHandling()->get(
    '/?framework=laravel&author=Otwell&page=2', ['Accept' => 'application/json']
);

$response->assertStatus(200);

$response->assertJson([
    'data' => [
        [
            'id' => 2,
            'title' => 'Laravel Nova',
        ],
    ],
    'links' => [
        'first' => '/?author=Taylor&page=1',
        'last' => '/?author=Taylor&page=3',
        'prev' => '/?author=Taylor&page=1',
        'next' => '/?author=Taylor&page=3',
    ],
    'meta' => [
        'current_page' => 2,
        'from' => 2,
        'last_page' => 3,
        'path' => '/',
        'per_page' => 1,
        'to' => 2,
        'total' => 3,
    ],
]);

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

Release v6.7.0 · laravel/framework · GitHub

© Xzxzyzyz