[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,
],
]);
詳しい変更については以下を確認してください。