[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rafael Lannes
Criador Rafael Lannes 25/08/2021

Boa noite Carlos, beleza?

 

Eu possuo um modelo Servico que possui os seguintes relacionamentos:

 

 public function subcategoria()

    {

        return $this->belongsTo(Subcategoria_Servico::class, 'subcategorias_servico_id');

    }

 

   public function tags()

    {

        return $this->belongsToMany(Tag::class);

    }

 

Eu gostaria de fazer uma pesquisa usando LIKE a partir do modelo de Serviço e também nas colunas de subcategoria e tags, porém não queria restringir os registros que não possuirem tags.

Exemplo:

Se eu passar como parametro a palavra Limpeza eu teria que procurar nas colunas da tabela Servico, Categoria e Tags.

 

Eu até consigo filtrar usando um relacionamento, mas quando são multiplos não estou conseguindo. Qual a melhor forma de fazer isso, sem restringir os resultados?

 

obrigado.

 

 

Criador Rafael Lannes 25/08/2021

Eu fiz algo mais ou menos assim:

        $results = $this->with(['subcategoria' => function ($query) use ($filter) {
            $query->where('descricao''like'"%{$filter}%");
        }])
            ->with(['tags' => function ($query) use ($filter) {
                $query->where('descricao''like'"%{$filter}%");
            }])
            ->Orwhere('titulo''like'"%{$filter}%")
            ->Orwhere('sobre''like'"%{$filter}%")
            ->get();

Acontece que ele só está buscando pelos campos 'titulo' e 'sobre' que são campos do model Servico, como que eu faria para buscar também do campo 'descricao' do relacionamento subcategorias e tags

 

 

 

 

 

 

 

 

 

 

 

 

 

Rafael Lannes
Manager Carlos Ferreira 25/08/2021

Olá, Rafael!
Beleza, e com você?

Pra mim que estou por fora do projeto ficou um pouco confuso entender a relação das tabelas.

Categorias tem uma relação 1:N com Subcategorias, e uma relação N:N com com Tags, isso mesmo?

Filtrando como você fez passando uma função de callback no relacionamento vai filtrar apenas os relacionamento e não relação entre relação e tabela principal.

Use o método whereHas, exemplo:
$posts = $this->whereHas('tags', function($query) use ($filter) {
    $query->where('descricao', 'like', "%{$filter}%");
})
->whereHas('subcategoria', function($query) use ($filter) {
    $query->where('descricao', 'like', "%{$filter}%");
})
->get();

Carlos Ferreira
Criador Rafael Lannes 25/08/2021

Show, Carlos. Beleza, consegui fazendo dessa forma

Obrigado!!!

 

Rafael Lannes
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!