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

接下来,查询生成器现在有了 existsOrdoesntExistOr 方法,它们允许您在条件为 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() and Str::beforeLast() 方法 (#30507)
  • 查询构造器增加 existsOr()doesntExistOr() 方法 (#30495)
  • 在 Blade 自定义 if 指令中添加 unless 条件 (#30492)

改变

  • 在开始事务时,如果缺少连接,则添加重新连接 (#30474)
  • 使用 PhpRedis 设置 Redis 集群前缀 (#30461)

译自 Laravel官网


Practice makes perfect.

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!