[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Ytalo
Criador Ytalo 27/12/2023

Olá, tudo bem?

Atualmente estou construindo uma api e nos meus modelos eu tenho uma função que traz todos os itens filtrados com paginação, como em todos os modelos eu uso a mesma função, eu gostaria  de saber qual a melhor forma para utilizar essa função de forma generica no laravel? 

 

 

Manager Carlos Ferreira 27/12/2023

Olá, Ytalo! Tudo bem?

 

Me mostre um pouco mais dessa função, que dependendo o contexto dela tem abordagens diferentes.

 

Um caminho possível (dependendo do contexto) é criar um helper, básicamente definir um arquivo com funções em app/Helpers/functions.php

 

E nesse arquivo declarar todas as funcões que precisa:

if (! function_exists('fazAlgumaCoisa')) {

    function fazAlgumaCoisa(Collection $items): array

    {

        // Código

    }

}

 

Depois disso, basta declarar esse arquivo no composer.json em autoload -> "files": ["app/Helpers/functions.php"]

composer dump-autoload e pronto, a função estará global.

Carlos Ferreira
Criador Ytalo 27/12/2023

Olá, segue o modelo da função

 

private $itemsPerPage = 10;

public function getItems($data, $itemsPerPage = null)
{
    $itemsPerPage = $data->input('itemsPerPage', $this->itemsPerPage);

    if (isset($data['filter'])) {
        $filter = $data['filter'];
        $query->where(function ($query) use ($filter) {
            $query->where('campo', 'LIKE', "%{$filter}%");
        });
    }

    if (isset($data['campo'])) {
        $query->where('campo', 'LIKE', "%{$data['campo']}%");
    }

    return $query->paginate($itemsPerPage ?? $this->itemsPerPage);
}

Ytalo
Manager Carlos Ferreira 27/12/2023

Uma alternativa possível seria criar uma trait, e nessa trait ter um método que aplicar estes filtros de forma condicional. Pegou a ideia?

Carlos Ferreira
Criador Ytalo 27/12/2023

Acredito que sim, eu realizei as alterações utilizando trait e aparentemente está funcionando bem, muito obrigado pela ajuda.

 

 

Ytalo
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!