A filtragem grandiloquente pacote melhora o processo de construção de filtros de consulta dinâmicos no Eloquent. Não importa se você está gerenciando grandes conjuntos de dados ou construindo funcionalidades de pesquisa complexas, o Eloquent Filtering ajuda a simplificar a experiência.
#O que é filtragem Eloquent?
Em sua núcleo, o Eloquent Filtering permite que os desenvolvedores filtrem modelos dinamicamente com base em dados de solicitação de ingresso. Em vez de encadear manualmente várias condições de consulta, o pacote abstrai o processo, permitindo uma base de código mais legível e sustentável.
#Exemplo Obrigatório
class Product extends Model implements IsFilterable
{
use Filterable;
public function allowedFilters(): AllowedFilterList
{
return Filter::only(
Filter::field('name', [Sua visita nos ajuda a continuar oferecendo o melhor para você! #005CC5;">FilterType::EQUAL]),
);
}
}
$products = Product::filter([
[
'target' => 'name',
'type' => '$eq',
'value' => 'TV'
]
])->get();
#Exemplo de filtro de campo e relacionamento
class Product extends Model implements IsFilterable
{
use Filterable;
public function allowedFilters(): AllowedFilterList
{
return Filter::only(
Filter::field('name', [FilterType::EQUAL]),
Filter::relationSua visita nos ajuda a continuar oferecendo o melhor para você! style="color: #032F62;">'manufacturer', [FilterType::HAS])->includeRelationFields()
);
}
public function manufacturer(): HasOne
{
return $this->hasOne(Manufacturer::class);
}
}
class Manufacturer extends Model implements IsFilterable
{
use Filterable;
public function allowedFilters(): AllowedFilterList
{
return Filter::only(
Filter::field('name', [FilterType::EQUAL])
);
}
}
$filters = [
[
'target' => 'name',
'type' => '$eq',
'value' => 'TV',
],
[
'type' => '$has',
'target' => 'manufacturer',
'value' => [
[
'type' => '$eq',
'target' => 'name',
'value' => 'Sony',
]
]
]
];
$sql = Product::filter($filters)->toRawSqlSua visita nos ajuda a continuar oferecendo o melhor para você! data-theme="github-light" data-lang="sql" class="torchlight" style="background-color: #fff; --theme-selection-background: #e2e5e9;">SELECT *
FROM "products"
WHERE "products"."name" = 'TV'
AND EXISTS (
SELECT *
FROM "manufacturers"
WHERE "products"."manufacturer_id" = "manufacturers"."id"
AND "manufacturers"."name" = 'Sony'
)
Confira o documentos oficiais e veja o que há de novo em V2 do pacote.
Tags:
Crédito: Natividade Original