News

Support for Query Builder Pipelines in Laravel 12.4

Published Updated
Support for Query Builder Pipelines in Laravel 12.4 image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released v12.4.0, which includes a query builder pipe() method, the ability to conditionally skip migrations, an Arr::sole() method, and more.

Query Builder pipe() Method

Tim MacDonald contributed a pipe() method to the base query builder and Eloquent query builder. This method's functionality is the same as the Collection::pipe() method:

$records = DB::query()
->from('...')
// ...
->tap(new TappableScope) // returns the query
->pipe(new ActionScope); // executes the query and returns the result

Skipping Migrations

Dan Matthews conbributed the ability to programatically skip migrations by adding an optional shouldRun() method to a migration:

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

The shouldRun() method is considered for both migrate and rollback commands. See the Database Migrations documentation for details.

Arr::sole() Method

Ralph J. Smit contributed a Arr::sole() method, similar to collections and Eloquent collections. Sole supports passing a simple array that will return the first item only if it is the only item. Also, you can pass a callable as the second argument:

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 for Listeners Pushed

Luke Kuzmish contributed a listenersPushed() method you can use to assert a queue listener was pushed during a test:

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() Method

Vishal Chavda contributed a Model::except() method to retrieve model attributes excluding specific keys. This method is the inverse of the only() method:

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

Assert Does Not Throw Method

Günther Debrauwer contributed a assertDoesntThrow() method to easily assert that a block of code doesn't throw an exception

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

This method is documented in the HTTP Tests documentation.

Where Null and Where Not Null JSON Assertions

Faissal Wahabali contributed whereNull() and whereNotNull() methods to Assertablejson instances. Here's an example from the pull request of how this works:

// Usage:
fn (AssertableJson $json) => $json->whereNull('error')
 
 
// Example from the Framework tests:
$assert = AssertableJson::fromArray([
'bar' => 'value',
]);
 
$this->expectException(AssertionFailedError::class);
$this->expectExceptionMessage('Property [bar] should be null.');
 
$assert->whereNull('bar');

Edit: 04/01/2025

I somehow missed the new AsHtmlString Eloquent cast in v12.4! I wrote a separate post about it:

As of v12.4, you can automatically cast Eloquent attributes to an HTML string using the AsHtmlString cast. The framework already has an HtmlString class available; this cast stitches it together with Eloquent attributes.

Release notes

You can see the complete list of new features and updates below and the diff between 12.3.0 and 12.4.0 on GitHub. The following release notes are directly from the changelog:

v12.4.0

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Image Dominant Color and HEIC Support in Laravel 13.24 image

Image Dominant Color and HEIC Support in Laravel 13.24

Read article
Official Laravel Zed Extension: LSP for PHP & Blade image

Official Laravel Zed Extension: LSP for PHP & Blade

Read article
Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD image

Laravel Head: Manage Meta Tags, Open Graph, and JSON-LD

Read article
PhpStorm 2026.2 Released image

PhpStorm 2026.2 Released

Read article
Laravel Doctor: Diagnose Your App With One Artisan Command image

Laravel Doctor: Diagnose Your App With One Artisan Command

Read article
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article