Filtrar diversas colunas de multiplos relacionamentos
[Concluído]
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.
Eu fiz algo mais ou menos assim:
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
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();
Show, Carlos. Beleza, consegui fazendo dessa forma
Obrigado!!!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!