Підтримка конвеєрів у Query Builder в Laravel 12.4

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 01 квітня, 2025
Досліджуйте нові можливості третьої версії Laravel 12.4.0, включаючи методи `pipe()` для конструктора запитів і вибіркове пропускання міграцій! Занурюйтесь у деталі оновлень, які покращать вашу розробку та зроблять її ще більш ефективною

Команда Laravel випустила версію 12.4.0, що включає метод pipe() для побудови запитів, можливість умовно пропускати міграції, метод Arr::sole() та багато іншого

# Метод pipe() для побудови запитів

Тім Макдональд додав метод pipe() як до базового, так і до Eloquent побудовника запитів. Його функціонал аналогічний методу Collection::pipe():

$records = DB::query()
    ->from('...')
    // ...
    ->tap(new TappableScope) // повертає запит
    ->pipe(new ActionScope); // виконує запит і повертає результат

# Пропуск міграцій

Дан Метьюз додав можливість програмно пропускати міграції, включивши необов'язковий метод shouldRun():

return new class extends Migration
{
   public function shouldRun()
   {
        return Feature::active(Flights::class);
   }
   // ...
}

Метод shouldRun() враховується для команд migrate та rollback. Деталі дивись у документації з міграцій.

# Метод Arr::sole()

Ральф Дж. Сміт реалізував метод Arr::sole(), подібний до колекцій. Метод sole підтримує передачу простого масиву, який повертає перший елемент лише, якщо це єдиний елемент. Також можна передати виклик як другий аргумент:

Arr::sole(['foo']); // "foo"
 
// @throws \Illuminate\Support\ItemNotFoundException
Arr::sole(['foo'], fn (string $value) => $value === 'baz');
 
// @throws \Illuminate\Support\MultipleItemsFoundException
Arr::sole(['baz', 'foo', 'baz'], fn (string $value) => $value === 'baz');

# Queue fake Helper для слухачів

Люк Кузміш додав метод listenersPushed(), який дозволяє стверджувати, що слухач черги був доданий під час тесту:

Queue::fake();
event(new SomeEvent(value: 'look, a value!'));
 
$this->assertCount(
    1,
    Queue::listenersPushed(
        SomeEventListener::class,
        fn (SomeEvent $event) => $event->value === 'look, a value!'
    )
);

# Метод Model except()

Вішал Чавда реалізував метод Model::except() для отримання атрибутів моделі, виключаючи певні ключі. Цей метод є оберненим до only():

$user->except('id', 'email');

# Метод assertDoesNotThrow

Гюнтер Дебрауер додав метод assertDoesntThrow() для зручної перевірки, що блок коду не викликає винятків:

$this->assertDoesntThrow(fn () => (new ProcessOrder)->execute());

Цей метод задокументовано у документації HTTP тестів.

# JSON-ствердження where Null і where Not Null

Фаісал Вахабалі додав методи whereNull() і whereNotNull() до екземплярів AssertableJson. Ось приклад з запиту:

// Використання:
fn (AssertableJson $json) => $json->whereNull('error')
 
// Приклад з тестів Фреймворку:
$assert = AssertableJson::fromArray([
    'bar' => 'value',
]);
 
$this->expectException(AssertionFailedError::class);
$this->expectExceptionMessage('Property [bar] should be null.');
 
$assert->whereNull('bar');

# Примітки щодо випуску

Повний список нових можливостей та оновлень можна переглянути нижче, а також диф між версіями 12.3.0 і 12.4.0 на GitHub. Наступні примітки є частиною журналу змін:

# v12.4.0