[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Marcos Birro Calixto
Criador Marcos Birro Calixto 05/09/2024

Boa tarde.

Tenho um retorno relacionado e está ok. Listo as ordens de serviço com seus clientes pelo nome e seus veículos pela placa.

        $ordemservicos = $ordemservico::with('cliente', 'veiculo')
        ->orderby('id', 'desc')
        ->paginate();
 
Estou precisando filtrar não comente pelo número da OS mas tabém pelo nome do cliente e pela placa do veículo.
 
Fiz abaixo conforme faço as pesquisas normais mas como faria esta relacionada?
    public function search($filter = null)
    {
        $results = $this->where(function ($query) use ($filter)) {}
                        ->orWhere('dataentrada', '=', "%{$filter}%")
                        ->orWhere('dataentrada', 'LIKE', "%{$filter}%")
                        ->orWhere('name', 'LIKE', "%{$filter}%")
                        ->orWhere('marca', 'LIKE', "%{$filter}%")
                        ->paginate();

        return $results;
    }
Criador Marcos Birro Calixto 05/09/2024

Estou tentando fazer assim mas está errado!!!

    public function search($filter = null, Ordemservico $ordemservico, Cliente $Cliente, Veiculo $veiculo)
    {
        $results = $ordemservico::with('cliente', 'veiculo')->where(function ($query) use ($filter) {
            $query->select($ordemservico)
                ->from('ordemservicos')
                ->where('ordemservicos.id', $filter)
                ->orWhere('ordemservico.dataentrada', LIKE, $filter)
                ->orWhere('ordemservico.cliente->name', LIKE, $filter)
                ->orWhere('ordemservico.veiculo->placa', LIKE, $filter)
                ->orWhere('ordemservico.veiculo->marca', LIKE, $filter)
                });

        return $results;
    }
Marcos Birro Calixto
Criador Marcos Birro Calixto 05/09/2024

Alterei para

    public function search($filter = null, Ordemservico $ordemservico, Cliente $Cliente, Veiculo $veiculo)
    {
        $results = $ordemservico::with('cliente', 'veiculo')->where(function ($query) use ($filter) {
                $query->where('ordemservicos.id', "$filter");
                $query->orWhere('ordemservicos.dataentrada', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->cliente->name', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->veiculo->placa', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->veiculo->marca', 'LIKE', "%{$filter}%");
                })->paginate();

        return $results;
    }
E agora o erro é: Parece que é erro de sintaxe de como estou colocando os campos relacionados.
 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ordemservico.dataentrada' in 'where clause' (Connection: mysql, SQL: select *
from `ordemservicos` where (`ordemservicos`.`id` = 1 or `ordemservico`.`dataentrada` LIKE %1% or json_unquote(json_extract(`ordemservico`.
`cliente`, '$."name"')) LIKE %1% or json_unquote(json_extract(`ordemservico`.`veiculo`, '$."placa"')) LIKE %1% or
json_unquote(json_extract(`ordemservico`.`veiculo`, '$."marca"')) LIKE %1%) and `ordemservicos`.`deleted_at` is null)
Marcos Birro Calixto
Manager Carlos Ferreira 05/09/2024

Olá, Marcos! Tudo bem?

Preciso entender melhor sua estrutura de tabelas, para conseguir te ajudar com isso.

Carlos Ferreira
Criador Marcos Birro Calixto 05/09/2024

Bom dia. Segue estrutura e relacionamentos:

CREATE TABLE `ordemservicos` (

  `id` bigint UNSIGNED NOT NULL,

  `veiculo_id` bigint UNSIGNED NOT NULL,

  `cliente_id` bigint UNSIGNED NOT NULL,

  `user_id` bigint UNSIGNED NOT NULL,

 

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

E aqui o meu index no controller. Vem as OSs e seus relacionamentos:

        $ordemservicos = $ordemservico::with('cliente', 'veiculo')
        ->orderby('id', 'desc')
        ->paginate();
 
Obrigado.
Marcos Birro Calixto
Manager Carlos Ferreira 05/09/2024

E essa query final está retornando como precisa?

Carlos Ferreira
Criador Marcos Birro Calixto 05/09/2024

Sim. Retorna ok

Marcos Birro Calixto
Criador Marcos Birro Calixto 05/09/2024

Vem todas as ordem com seus clientes e veículos.

Marcos Birro Calixto
Manager Carlos Ferreira 05/09/2024

Show, posso finalizar o ticket?

Carlos Ferreira
Criador Marcos Birro Calixto 05/09/2024

O problema está no search. Preciso filtrar com os relacionamentos e não estou sabendo resolver isso.

  public function search($filter = null, Ordemservico $ordemservico, Cliente $Cliente, Veiculo $veiculo)
    {
        $results = $ordemservico::with('cliente', 'veiculo')->where(function ($query) use ($filter) {
                $query->where('ordemservicos.id', "$filter");
                $query->orWhere('ordemservicos.dataentrada', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->cliente->name', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->veiculo->placa', 'LIKE', "%{$filter}%");
                $query->orWhere('ordemservicos->veiculo->marca', 'LIKE', "%{$filter}%");
                })->paginate();

        return $results;
    }
E agora o erro é: Parece que é erro de sintaxe de como estou colocando os campos relacionados.
 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ordemservico.dataentrada' in 'where clause' (Connection: mysql, SQL: select *
from `ordemservicos` where (`ordemservicos`.`id` = 1 or `ordemservico`.`dataentrada` LIKE %1% or json_unquote(json_extract(`ordemservico`.
`cliente`, '$."name"')) LIKE %1% or json_unquote(json_extract(`ordemservico`.`veiculo`, '$."placa"')) LIKE %1% or
json_unquote(json_extract(`ordemservico`.`veiculo`, '$."marca"')) LIKE %1%) and `ordemservicos`.`deleted_at` is null)
Marcos Birro Calixto
Manager Carlos Ferreira05/09/2024
Marcos Birro Calixto
Manager Carlos Ferreira 05/09/2024

Precisa fazer o join:

$results = $ordemservico->join('veiculos', 'veiculos.id', '=', 'ordemservicos.veiculo_id')

->join('clientes', 'clientes.id', '=', 'ordemservicos.cliente_id')

->where('ordemservicos.nome_coluna', 'LIKE', "%{$filter}%")

->where('veiculos.nome_coluna', 'LIKE', "%{$filter}%")

->where('clientes.nome_coluna', 'LIKE', "%{$filter}%")

->get();

Carlos Ferreira
Criador Marcos Birro Calixto 05/09/2024

Bom dia.

Funcionou. Obrigado.

Marcos Birro Calixto
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!