Carregamento Automático de Relações no Laravel 12.8

A equipe do Laravel lançou a versão 12.8.0, que inclui carregamento automático de relações ansiosas, criação de uma instância de coleção a partir de uma string JSON e muito mais:
Carregamento Automático de Relação
Serhii Litvinchuk contribuiu com o carregamento automático de relacionamento:
Em projetos grandes, pode ser difícil rastrear e especificar manualmente quais relações devem ser carregadas antecipadamente, especialmente se essas relações estiverem profundamente aninhadas ou forem usadas dinamicamente. Portanto, o carregamento automático de relações pode ser útil.
// instead of this $projects->load([ 'client.owner.details', 'client.customPropertyValues', 'clientContact.customPropertyValues', 'status', 'company.statuses', 'posts.authors.articles.likes', 'related.statuses']); // We can use this$projects->withRelationshipAutoloading();
Aqui está outro exemplo da descrição da solicitação de pull:
$orders = Order::all()->withRelationshipAutoloading(); foreach ($orders as $order) { echo $order->client->owner->company->name;} // automatic calls:// $orders->loadMissing('client');// $orders->loadMissing('client.owner');// $orders->loadMissing('client.owner.company');
Você pode habilitar o carregamento automático entre modelos usando o seguinte método estático:
Model::automaticallyEagerLoadRelationships();
Crie uma coleção a partir de JSON
@DarkGhostHunter
contribuiu com um
fromJson
método para a classe Collection, que você pode usar para criar uma coleção a partir de uma string JSON:
// Before$collection = new Collection(json_decode($json, true)); // After$collection = Collection::fromJson($json);
O
fromJson()
método também suporta os argumentos de profundidade e sinalizadores que você pode passar para
json_decode()
:
$collection = Collection::fromJson(json: $json, flags: JSON_THROW_ON_ERROR);
"Criar muitas" variantes de relações HasOneOrMany
Philip Iezzi
contribuiu
forceCreateMany()
com
forceCreateManyQuietly()
métodos Eloquent para o
HasOneOrMany
relacionamento:
$post->comments()->forceCreateMany($data);$post->comments()->forceCreateManyQuietly($data);
Aqui está um exemplo da descrição da solicitação de pull , que exigiria a criação forçada de modelos individuais:
// Beforecollect($comments) ->map(fn (array $comment) => [ ...$comment, // override some attributes here ]) ->each(fn (array $comment) => $post->comments()->forceCreateQuietly($comment)); // Aftercollect($comments) ->map(fn (array $comment) => [ ...$comment, // override some attributes here ]) ->pipe($post->comments()->forceCreateManyQuietly(...));
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.7.0 e 12.8.0, no GitHub. As seguintes notas de lançamento foram retiradas diretamente do changelog :
v12.8.0
- [12.x] verifique apenas uma vez se há exclusões suaves durante a poda em massa por @cosmastech em https://github.com/laravel/framework/pull/55274
-
[12.x] Adicionar variantes de atribuição em massa createMany à
HasOneOrMany
relação por @onlime em https://github.com/laravel/framework/pull/55262 - cosmético: incluir o caso is_array() na construção match de getArrayableItems por @epic-64 em https://github.com/laravel/framework/pull/55275
- Adicione testes para InvokeSerializedClosureCommand por @Amirhf1 em https://github.com/laravel/framework/pull/55281
- [12.x] Impede temporariamente o PHPUnit 12.1 por @crynobone em https://github.com/laravel/framework/pull/55297
- [12.x] Melhorias de teste por @crynobone em https://github.com/laravel/framework/pull/55306
- Aumento do vite de 5.4.12 para 5.4.17 em /src/Illuminate/Foundation/resources/exceptions/renderer por @dependabot em https://github.com/laravel/framework/pull/55301
- [12.x] Melhorias de teste por @crynobone em https://github.com/laravel/framework/pull/55307
- [12.x] adicionar genéricos aos tipos de array para gramáticas de esquema por @taka-oyama em https://github.com/laravel/framework/pull/55314
- [12.x] corrige nullable ausente para Query/Grammar::compileInsertGetId por @taka-oyama em https://github.com/laravel/framework/pull/55311
-
[12.x] Adiciona
fromJson()
à coleção de @DarkGhostHunter em https://github.com/laravel/framework/pull/55310 -
[12.x] Corrigir
illuminate/database
uso como pacote autônomo por @crynobone em https://github.com/laravel/framework/pull/55309 - Chave de array correta em InteractsWithInput por @AJenbo em https://github.com/laravel/framework/pull/55287
- [12.x] Corrigir suporte para adicionar eventos observáveis personalizados de características por @willrowe em https://github.com/laravel/framework/pull/55286
- [12.x] Recurso de carregamento automático de relação (carregamento ansioso) adicionado por @litvinchuk em https://github.com/laravel/framework/pull/53655
- [12.x] Modificar PHPDoc para funções Collection::chunkWhile para suportar a preservação de chaves por @jsvdvis em https://github.com/laravel/framework/pull/55324
- [12.x] Introdução a Rule::anyOf() para validação em vários conjuntos de regras por @brianferri em https://github.com/laravel/framework/pull/55191