Laravel 6.5 新功能
Laravel 团队本周发布了 v6.5 版本,在 LazyCollection
中增加了一个新的 remember
功能。此外,该版本还包括一些新的字符串辅助函数、自定义的 unless
blade 条件和一些新的查询构造器方法。
首先,一个新的 LazyCollection::remember()
方法,它会记住任何枚举值,并且在再次枚举时不会从源获取它们。下面是 pull request 中的一个例子:
$users = User::cursor()->remember();
// 还没有执行任何查询。
$users->all();
// 所有值都已从数据库中提取。
$users->all();
// 我们没有再次点击数据库。我们从 `remember` 的缓存中获取用户.
下面是来自 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, '\\'); // 任务更新
$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');
});
最后,将新的 unless
条件添加到自定义的 Blade if
指令中。例如,来自 Blade
文档的自定义 env
示例允许您在 Blade 中使用以下语法:
@env('local')
// 应用程序位于本地环境中…
@elseenv('testing')
// 应用程序位于测试环境中…
@else
// 应用程序不在本地环境也不在测试环境中…
@endenv
现在您还可以使用这个条件的「unless」变体来避免奇怪的 if/else
场景:
{{-- Instead of this: --}}
@env('production')
@else
// 应用程序不在生产环境中...
@endenv
{{-- You can write this: --}}
@unlessenv('production')
// 应用程序不在生产环境中...
@endenv
你可以在下面看到完整的新特性和更新列表,以及它们之间的区别 6.4.1 and 6.5.0 在 GitHub. Laravel 6.0 的完整发布说明可以在GitHub上找到 v6 changelog:
v6.5.0
增加
- 增加
LazyCollection::remember()
方法 (#30443) - 增加
Str::afterLast()
andStr::beforeLast()
方法 (#30507) - 查询构造器增加
existsOr()
和doesntExistOr()
方法 (#30495) - 在 Blade 自定义
if
指令中添加unless
条件 (#30492)
改变
译自 Laravel官网
推荐文章: