Команда Laravel випустила версію 12.4.0, що включає метод pipe() для побудови запитів, можливість умовно пропускати міграції, метод Arr::sole() та багато іншого
Тім Макдональд додав метод 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(), подібний до колекцій. Метод 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');
Люк Кузміш додав метод 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() для отримання атрибутів моделі, виключаючи певні ключі. Цей метод є оберненим до only():
$user->except('id', 'email');
Гюнтер Дебрауер додав метод assertDoesntThrow() для зручної перевірки, що блок коду не викликає винятків:
$this->assertDoesntThrow(fn () => (new ProcessOrder)->execute());
Цей метод задокументовано у документації HTTP тестів.
Фаісал Вахабалі додав методи 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. Наступні примітки є частиною журналу змін:
AsHtmlString від @ralphjsmitArr::sole() від @ralphjsmitApiInstallCommand від @sajjadhossainshohagrelated від @browner12QueueFake::listenersPushed() від @cosmastech@return документацію на конструкторах від @browner12new Collection замість Collection::make від @AhmedAlaa4611whereNull і whereNotNull у AssertableJson від @faissalouxIlluminate\Queue\Jobs\Job::getJobId() та Illuminate\Queue\Jobs\DatabaseJob::getJobId() від @petrknapshouldRun до міграцій від @danmatthewsUri запобігання пустому рядку запиту від @rojtjoFileViewFinder від @imanghafoori1null від @willrowepipe для побудови запитів від @timacdonaldLog::withoutContext для видалення вибраного контексту з майбутніх логів від @mattroylloydExpression до параметра $value у методі QueryBuilder having() від @faissalouxwithAttributes на Eloquent Builder від @AndrewMast