Команда 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