Laravel 6.5 现已发布
发布日期:作者: Paul Redmond
Laravel 团队本周发布了 v6.5,其中新增了 remember
函数到 LazyCollection
中。此外,此版本还包含了一些新的字符串助手、自定义 unless
blade 条件和一些新的查询构建器方法。
首先,新的 LazyCollection::remember()
方法会记住所有枚举值,并且在再次枚举时不会从源中拉取这些值。以下是一个来自 pull request 的示例
$users = User::cursor()->remember(); // No query has been executed yet. $users->all(); // All values have been pulled from the DB. $users->all(); // We did not hit the DB again. We got the users from `remember`’s cache.
以下是一个来自 PR 测试的示例,可能更容易理解
$source = [1, 2, 3, 4]; $collection = LazyCollection::make(function () use (&$source) { yield from $source;})->remember(); $this->assertSame([1, 2, 3, 4], $collection->all()); $source = []; $this->assertSame([1, 2, 3, 4], $collection->all());
接下来,添加了两个新的 Str
方法:afterLast()
和 beforeLast()
$type = 'App\Notifications\Tasks\TaskUpdated';Str::afterLast($type, '\\'); // TaskUpdated $filename = 'photo.2019.11.04.jpg';Str::beforeLast($filename, '.'); // photo.2019.11.04
接下来,查询构建器现在拥有 existsOr
和 doesntExistOr
方法,这些方法允许您在条件为 false
时定义回调
$user->dossiers() ->whereNull('closed_at') ->doesntExistOr(function () { abort(422, 'User already has an open dossier'); });
最后,在自定义 Blade if
指令中添加了新的 unless
条件。例如,Blade 文档中的自定义 env
示例允许您在 Blade 中使用此语法
@env('local') // The application is in the local environment…@elseenv('testing') // The application is in the testing environment…@else // The application is not in the local or testing environment…@endenv
现在,您还可以使用此条件的“unless”变体来避免奇怪的 if/else
场景
{{-- Instead of this: --}}@env('production')@else // The application is not in the production environment...@endenv {{-- You can write this: --}}@unlessenv('production') // The application is not in the production environment...@endenv
您可以在下面查看所有新功能和更新的完整列表,以及 GitHub 上 6.4.1 和 6.5.0 之间的完整差异。Laravel 6.0 的完整发布说明可在 GitHub 的 v6 变更日志 中找到
v6.5.0
已添加
- 添加了
LazyCollection::remember()
方法 (#30443) - 添加了
Str::afterLast()
和Str::beforeLast()
方法 (#30507) - 在查询构建器中添加了
existsOr()
和doesntExistOr()
方法 (#30495) - 在 Blade 自定义
if
指令中添加了unless
条件 (#30492)