Laravel 团队本周发布了 v10.44,其中包含两个 Eloquent 模型属性,用于定义全局范围和观察者,一个新的 select() 集合方法等等
模型的新 ScopedBy 属性
Eliezer Margareten 为您的 Eloquent 模型贡献了一个 ScopedBy
属性,用于注册 全局范围
use App\Models\Scopes\AncientScope;use Illuminate\Database\Eloquent\Attributes\ScopedBy; #[ScopedBy([AncientScope::class])]class User extends Model{ //}
您仍然可以在模型中使用 booted()
方法注册全局范围
/** * The "booted" method of the model. */protected static function booted(): void{ static::addGlobalScope(new AncientScope);}
ScopedBy
属性接受单个观察者或观察者数组,您还可以为您的模型定义多个属性
// Array type#[ScopedBy([ScopeOne::class, ScopeTwo::class])] // Repeatable string type#[ScopedBy(ScopeOne::class)]#[ScopedBy(ScopeTwo::class)]
模型的新 ObservedBy 属性
Eliezer Margareten 贡献了一个 ObservedBy
属性,用于注册 模型观察者 在您的 Eloquent 模型上
use App\Observers\UserObserver;use Illuminate\Database\Eloquent\Attributes\ObservedBy; #[ObservedBy([UserObserver::class])]class User extends Authenticatable{ //}
ObservedBy
属性接受单个观察者或观察者数组,如果您喜欢,还可以为您的模型定义多个属性
// Array of classes#[ObservedBy([UserObserver::class, AnotherObserver::class])] // Repeatable as string#[ObservedBy(UserObserver::class)]#[ObservedBy(AnotherObserver::class)]
ObservedBy
属性是注册观察者的另一种方法,传统上是在服务提供者中完成的
public function boot(): void{ User::observe(UserObserver::class);}
select() 集合方法
Craig Morris 贡献了一个新的 Collection::select()
方法,该方法从多维数组中选择一定数量的键。select()
方法类似于 SQL 的 SELECT
语句
$users = collect([ ['name' => 'Taylor Otwell', 'role' => 'Developer', 'status' => 'active'], ['name' => 'Victoria Faith', 'role' => 'Researcher', 'status' => 'active'],]); $users->select(['name', 'role']); /* [ ['name' => 'Taylor Otwell', 'role' => 'Developer'], ['name' => 'Victoria Faith', 'role' => 'Researcher'], ],*/
Base64 字符串方法
Mark Townsend 为 Str 和 Stringable 贡献了 toBase64()
和 fromBase64()
。这些方法分别封装了 base64_encode()
和 base64_decode()
// Using Str$encoded = Str::toBase64('laravel-news.com');$decoded = Str::fromBase64($encoded); // Using Stringable$encoded = str('laravel-news.com')->toBase64();$decoded = str($encoded)->fromBase64();
以下是一些来自 tinker
会话的示例输出
新 Arr::take() 方法
Ryan Chandler 贡献了一个 Arr::take()
方法,用于从数组中获取一定数量的项目。它将从正数的数组开头和负数的数组结尾获取
$data = [1, 2, 3, 4, 5, 6, 7, 8, 9]; Arr::take($data, 3); // [1, 2, 3]Arr::take($data, -3); // [7, 8, 9]Arr::take($data, 0); // []Arr::take($data, 1); // [1]Arr::take($data, -1); // [9]
发布说明
您可以在下面查看新功能和更新的完整列表,以及 10.43.0 和 10.44.0 之间的差异。以下发布说明直接来自 变更日志
v10.44.0
- [10.x] 通过 @driesvints 在 https://github.com/laravel/framework/pull/49924 中修复 HTTP 连接异常的空请求
- [10.x] 通过 @morrislaptop 在 https://github.com/laravel/framework/pull/49845 中添加 Collection::select() 方法
- [10.x] 通过 @milwad-dev 在 https://github.com/laravel/framework/pull/49944 中重构 UrlGenerator 中的
getPreviousUrlFromSession
方法 - [10.x] 通过 @Tofandel 在 https://github.com/laravel/framework/pull/49943 中将 POSIX 兼容清理添加到 artisan serve
- [10.x] 通过 @mateusjunges 在 https://github.com/laravel/framework/pull/49972 中修复全局范围查询包含聚合时的无限循环
- [10.x] 通过 @nunomaduro 在 https://github.com/laravel/framework/pull/49957 中添加 PHPUnit 11 作为冲突
- 通过 @taylorotwell 在 https://github.com/laravel/framework/pull/50013 中恢复“[10.x] 修复 Before/After 验证规则”
- [10.x] 通过 @joke2k 在 https://github.com/laravel/framework/pull/49990 中修复 Str 和 Stringable 帮助程序中 replaceMatches 的 phpdoc
- [10.x] 通过 @Rijoanul-Shanto 在 https://github.com/laravel/framework/pull/49981 中为
AblyBroadcaster
添加setAbly()
方法 - [10.x] 通过 @t1nkl 在 https://github.com/laravel/framework/pull/49958 中修复 appendExceptionToException 方法中的异常类型检查
- [10.x] DB 命令:当设置
trust_server_certificate
时,添加 sqlcmd -C 标志,通过 @hulkur 在 https://github.com/laravel/framework/pull/49952 中完成 - 允许在 Laravel 的备用 TestCase 中重复使用设置和拆卸操作,通过 @crynobone 在 https://github.com/laravel/framework/pull/49973 中完成
- [10.x] 通过 @mtownsend5512 在 https://github.com/laravel/framework/pull/49984 中将
toBase64()
和fromBase64()
方法添加到 Stringable 和 Str 类 - [10.x] 通过 @crynobone 在 https://github.com/laravel/framework/pull/50024 中允许仅在可用时推迟解析 pcntl
- [10.x] 通过 @crynobone 在 https://github.com/laravel/framework/pull/50021 中修复丢失的
Throwable
导入,并处理备用 TestCase 中originalExceptionHandler
或originalDeprecationHandler
属性未被使用的情况 - [10.x] 通过 @lorenzolosa 在 https://github.com/laravel/framework/pull/50017 中对条件验证规则进行类型提示
- [10.x] 通过 @ryangjchandler 在 https://github.com/laravel/framework/pull/50015 中引入新的
Arr::take()
帮助程序 - [10.x] 通过 @comes 在 https://github.com/laravel/framework/pull/49966 中改进对使用 HTML 注释或换行符的空组件插槽的处理
- [10.x] 通过 @emargareten 在 https://github.com/laravel/framework/pull/49843 中为模型引入 Observe 属性
- [10.x] 通过 @emargareten 在 https://github.com/laravel/framework/pull/50034 中为模型添加 ScopedBy 属性
- [10.x] 通过 @xurshudyan 在 https://github.com/laravel/framework/pull/50043 中更新
GeneratorCommand
中的保留名称 - [10.x] 通过 @helitik 在 https://github.com/laravel/framework/pull/50056 中修复 Validator::validated 获取空数组
- [10.x] 通过 @mpociot 在 https://github.com/laravel/framework/pull/50069 中将 Herd 特定的环境变量传递给“artisan serve”
- 通过 @maximal 在 https://github.com/laravel/framework/pull/50067 中移除 UUID 检测中的正则表达式不区分大小写修饰符,以略微提高速度
- [10.x] 通过 @me-shaon 在 https://github.com/laravel/framework/pull/50064 中 HTTP 重试方法可以接受数组作为第一个参数
- [10.x] 通过 @oprypkhantc 在 https://github.com/laravel/framework/pull/50068 中修复使用 DatabaseTransactions 的测试中 DB::afterCommit() 损坏