Suporte para pipelines do Query Builder no Laravel 12.4

Laravel Notícias de tecnologia PHP Webdev
Suporte para pipelines do Query Builder no Laravel 12.4

A equipe do Laravel lançou a versão 12.4.0, que inclui um método pipe() do construtor de consultas, a capacidade de pular migrações condicionalmente, um método Arr::sole() e muito mais.

Método pipe() do Construtor de Consultas

Tim MacDonald contribuiu com um pipe() método para o construtor de consultas base e o construtor de consultas do Eloquent. A funcionalidade deste método é a mesma do Collection::pipe() método:

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

Ignorando Migrações

Dan Matthews contribuiu para a capacidade de ignorar migrações programaticamente adicionando um shouldRun() método opcional a uma migração:

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

O shouldRun() método é considerado para os comandos migrate e rollback . Consulte a documentação de Migrações de Banco de Dados para obter mais detalhes.

Método Arr::sole()

Ralph J. Smit contribuiu com um Arr::sole() método semelhante ao collections e ao Eloquent collections. O Sole suporta a passagem de um array simples que retornará o primeiro item somente se for o único. Além disso, você pode passar um callable como segundo argumento:

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');

Fila falsa Helper para ouvintes enviada

Luke Kuzmish contribuiu com um listenersPushed() método que você pode usar para afirmar que um ouvinte de fila foi enviado durante um teste:

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

Método except() do modelo

Vishal Chavda contribuiu com um Model::except() método para recuperar atributos do modelo, excluindo chaves específicas. Este método é o inverso do only() método:

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

Método Assert Não Lança

Günther Debrauwer contribuiu com um assertDoesntThrow() método para afirmar facilmente que um bloco de código não gera uma exceção

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

Este método está documentado na documentação de Testes HTTP .

Asserções JSON onde nulo e onde não nulo

Faissal Wahabali contribuiu whereNull() com whereNotNull() métodos para Assertablejson instâncias. Aqui está um exemplo da solicitação de pull de como isso funciona:

// 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');

Edição: 04/01/2025

Por algum motivo, perdi o novo AsHtmlString elenco do Eloquent na versão 12.4! Escrevi um post separado sobre isso:

A partir da versão 12.4, você pode converter automaticamente atributos do Eloquent para uma string HTML usando a conversão AsHtmlString. O framework já possui uma classe HtmlString disponível; essa conversão a conecta aos atributos do Eloquent.

Notas de lançamento

Você pode ver a lista completa de novos recursos e atualizações abaixo, além das diferenças entre as versões 12.3.0 e 12.4.0, no GitHub. As seguintes notas de lançamento foram retiradas diretamente do changelog :

v12.4.0