Команда Laravel випустила версію 12.21.0, що включає атрибути singleton та scoped для контейнера, метод у запитах для перевірки, чи знаходиться значення між двома колонками, сувору перевірку чисел та булевих значень і багато іншого:
@riasvdv додав два атрибути PHP, які можна безпосередньо використовувати в класах, що розв'язуються через контейнер, без потреби в ручній реєстрації як scoped або singleton:
use Illuminate\Container\Attributes\Singleton;
use Illuminate\Container\Attributes\Scoped;
#[Singleton]
class MyService
{
}
#[Scoped]
class MyService
{
}
Докладніше про singleton та scoped singleton дивіться в документації Laravel.
@DarkGhostHunter запропонував метод whereValueBetween()
для перевірки, чи лежить значення між двома колонками в запитах:
Цей PR дозволяє розробнику перевіряти, чи належить певне значення між двома колонками через Query Builder.
Це доповнює методи whereBetween() та whereColumnsBetween(), оскільки вони не можуть перевіряти, чи значення (такі як ціле число або таймстемп) лежить між колонками. Розробник повинен самостійно привести значення або значення колонок, як і з попередніми методами.
use App\Models\Post;
// До
Post::whereRaw('? between "visible_from" and "visible_to"', now())->get();
Post::where('visible_from', '<=', now())->where('visible_to', '>=', now())->get();
// Після
Post::whereValueBetween(now(), ['visible_from', 'visible_to'])->get();
Чотири пов'язані методи Query Builder дивіться в Pull Request #56119:
whereValueBetween()
orWhereValueBetween()
whereValueNotBetween()
orWhereValueNotBetween()
Luke Kuzmish вніс можливість відключити створення батьківських відношень у фабриках за замовчуванням. Цю функцію можна використовувати для забезпечення того, щоб не створювалися дані відношень. Для цього використовуйте статичні методи dontExpandRelationshipsByDefault()
та expandRelationshipsByDefault()
у фабриці:
public function test_has_one_editor_permission_returns_true(): void
{
UserPermissionFactory::dontExpandRelationshipsByDefault();
$collection = new UserPermissionCollection([
UserPermission::factory()
->withoutParents()
->make([
'type' => 'viewer',
'company_id' => 2,
'product_id' => 789,
]),
UserPermission::factory()
->withoutParents()
->make([
'type' => 'editor',
'company_id' => 2,
'product_id' => 432,
]),
]);
$result = $collection->hasEditorForCompany(2);
$this->assertTrue($result);
}
Деталі дивіться в Pull Request #56154.
@Kyrch додав метод toStringable()
для отримання URI як Stringable instance:
// До
Str::of(Uri::of('http://localhost')->withScheme('https'));
// Після
Uri::of('http://localhost')->withScheme('https')->toStringable();
Peter Fox додав сувору перевірку чисел та булевих значень, яка додатково перевіряє тип значення під час валідації:
use Illuminate\Support\Facades\Validator;
// Числове
Validator::make(['foo' => '1'], ['foo' => 'numeric:strict']); // не проходить
Validator::make(['foo' => 1], ['foo' => 'numeric:strict']); // проходить
// Булеве
Validator::make(['foo' => true], ['foo' => 'boolean:strict']); // проходить
Validator::make(['foo' => '1'], ['foo' => 'boolean:strict']); // не проходить
Документацію оновлено щодо булевих та числових правил.
Christian Worreschk додав методи isEmpty()
та isNotEmpty()
до класу Fluent для визначення, чи є об'єкт порожнім:
$fluent = new Fluent([
'name' => 'Laravel News',
'url' => 'https://laravel-news.com',
]);
$fluent->isEmpty(); // false
$fluent->isNotEmpty(); // true
new Fluent()->isEmpty(); // true
new Fluent()->isNotEmpty(); // false
Повний перелік нових можливостей та оновлень дивіться нижче, а також порівняння версій 12.20.0 та 12.21.0 на GitHub. Ці примітки безпосередньо з журналу змін:
Factory::dontExpandRelationshipsByDefault()
від @cosmastech в https://github.com/laravel/framework/pull/56154Htmlable
в Js::convertDataToJavaScriptExpression()
від @jj15asmr в https://github.com/laravel/framework/pull/56253AbstractCursorPaginator@through()
від @cosmastech в https://github.com/laravel/framework/pull/56267Date
фасад замість time()
для перевірки password_confirmed_at
від @dylanbr в https://github.com/laravel/framework/pull/56270dailyAt()
планувальника для парсингу хвилин та проігнорувати секунди, якщо секунди надані від @amirhshokri в https://github.com/laravel/framework/pull/56308SeedCommand
від @Jehong-Ahn в https://github.com/laravel/framework/pull/56310Validation
від @mrvipchien в https://github.com/laravel/framework/pull/56321mb_split()
для розбиття рядків на слова від @shaedrich в https://github.com/laravel/framework/pull/56338