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\ItemNotFoundExceptionArr::sole(['foo'], fn (string $value) => $value === 'baz'); // @throws \Illuminate\Support\MultipleItemsFoundExceptionArr::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
- [12.x] Redefinir o pico de uso de memória do PHP ao redefinir o escopo do trabalhador de fila por @TimWolla em https://github.com/laravel/framework/pull/55069
-
[12.x] Adicionar
AsHtmlString
elenco por @ralphjsmit em https://github.com/laravel/framework/pull/55071 -
[12.x] Adicionar
Arr::sole()
método de @ralphjsmit em https://github.com/laravel/framework/pull/55070 -
Melhore a mensagem de aviso
ApiInstallCommand
de @sajjadhossainshohag em https://github.com/laravel/framework/pull/55081 -
[12.x] usar
related
propriedade já determinada por @browner12 em https://github.com/laravel/framework/pull/55075 - [12.x] use "class-string" quando apropriado em relações por @browner12 em https://github.com/laravel/framework/pull/55074
-
[12.x]
QueueFake::listenersPushed()
por @cosmastech em https://github.com/laravel/framework/pull/55063 - [12.x] Método except() adicionado à classe Model para excluir atributos por @vishal2931 em https://github.com/laravel/framework/pull/55072
- [12.x] correção: adicionar TPivotModel padrão e definir propriedade pivot em {Belongs,Morph}ToMany por @calebdw em https://github.com/laravel/framework/pull/55086
-
[12.x] remover
@return
docblocks em construtores por @browner12 em https://github.com/laravel/framework/pull/55076 - [12.x] Adicionar atributo NamedScope por @shaedrich em https://github.com/laravel/framework/pull/54450
- [12.x] Melhorar o destaque de sintaxe para arquivos do tipo stub por @kayw-geek em https://github.com/laravel/framework/pull/55094
-
[12.x] Preferir
new Collection
porCollection::make
@ AhmedAlaa4611 em https://github.com/laravel/framework/pull/55091 - [12.x] Corrigir o método except() para suportar valores convertidos por @vishal2931 em https://github.com/laravel/framework/pull/55124
- [12.x] Adicionar caso de teste para o método findSole por @mrvipchien em https://github.com/laravel/framework/pull/55115
- [12.x] Tipos: PasswordBroker::reset por @liamduckett em https://github.com/laravel/framework/pull/55109
- [12.x] assertThrowsNothing por @gdebrauwer em https://github.com/laravel/framework/pull/55100
- [12.x] Corrigir a nulidade do tipo na propriedade PasswordBroker.events por @jnoordsij em https://github.com/laravel/framework/pull/55097
- [12.x] Corrigir anotação de tipo de retorno no método decrementPendingJobs por @shane-zeng em https://github.com/laravel/framework/pull/55133
- [12.x] Corrigir anotação de tipo de retorno no método de compilação por @shane-zeng em https://github.com/laravel/framework/pull/55132
-
[12.x] feat:
Adicionar
whereNull
ewhereNotNull
por @faissalouxAssertablejson
em https://github.com/laravel/framework/pull/55131 - [12.x] correção: usar vinculações contextuais na resolução de dependências de classe por @calebdw em https://github.com/laravel/framework/pull/55090
-
Melhores tipos de retorno para
Illuminate\Queue\Jobs\Job::getJobId()
eIlluminate\Queue\Jobs\DatabaseJob::getJobId()
métodos por @petrknap em https://github.com/laravel/framework/pull/55138 - Remover as tags @return restantes dos construtores por @mohammadrasoulasghari em https://github.com/laravel/framework/pull/55136
- [12.x] Várias correções de bugs de geração de URL por @stancl em https://github.com/laravel/framework/pull/54811
-
Adicione um método opcional
shouldRun
às migrações. por @danmatthews em https://github.com/laravel/framework/pull/55011 -
[12.x]
Uri
evita string de consulta vazia por @rojtjo em https://github.com/laravel/framework/pull/55146 - [12.x] Chame a função ob_flush somente se houver um buffer ativo em eventStream por @tonysm em https://github.com/laravel/framework/pull/55141
- [12.x] Adicionar evento CacheFlushed por @tech-wolf-tw em https://github.com/laravel/framework/pull/55142
- [12.x] Atualizar anotações do método DateFactory para compatibilidade com Carbon v3 por @kayw-geek em https://github.com/laravel/framework/pull/55151
- [12.x] Melhorar os docblocks para métodos relacionados a arquivos de InteractsWithInput por @SanderMuller em https://github.com/laravel/framework/pull/55156
-
[12.x] Melhoria dos
FileViewFinder
blocos de documentação por @imanghafoori1 em https://github.com/laravel/framework/pull/55183 -
Suporte ao uso do operador null-safe com
null
valor por @willrowe em https://github.com/laravel/framework/pull/55175 - [12.x] Correção: tornar consultas paginadas consistentes em todas as páginas por @tomchkk em https://github.com/laravel/framework/pull/55176
-
[12.x] Adicionar
pipe
construtores de consulta de método por @timacdonald em https://github.com/laravel/framework/pull/55171 - [12.x] correção: uma das muitas restrições de subconsulta por @calebdw em https://github.com/laravel/framework/pull/55168
- [12.x] correção (postgres): parênteses ausentes em whereDate/whereTime para colunas json por @saibotk em https://github.com/laravel/framework/pull/55159
- Corrigir criação de fábrica por meio de atributos por @davidstoker em https://github.com/laravel/framework/pull/55190
- [12.x] Corrigir Concurrency::run para preservar a ordem dos resultados do retorno de chamada por @chaker2710 em https://github.com/laravel/framework/pull/55161
-
[12.x] Log: Adicionar parâmetro de chaves opcional para
Log::withoutContext
remover o contexto selecionado de logs futuros por @mattroylloyd em https://github.com/laravel/framework/pull/55181 -
[12.x] Adicionar
Expression
tipo ao parâmetro$value
doQueryBuilder
having()
método por @faissaloux em https://github.com/laravel/framework/pull/55200 -
[12.x] Adicionar sinalizador para desabilitar cláusulas where para
withAttributes
o método no Eloquent Builder por @AndrewMast em https://github.com/laravel/framework/pull/55199