Usando Eloquent ORM no Laravel para realizar pesquisas de banco de dados usando LIKE


94

Quero usar a construção de registro ativo do Eloquent para construir uma consulta de pesquisa, mas será uma pesquisa LIKE. Encontrei o User::find($term)ou User::find(1), mas isso não está gerando uma declaração semelhante. Não estou procurando uma resposta direta, mas se alguém pudesse pelo menos me dar uma direção para procurar isso seria ótimo!


2
laravel.com/docs/database/eloquent .. você pode usar a documentação que é muito clara.
ytsejam

2
Eu vi esta página, mas não vi nada sobre pesquisar com curingas. Eu também não queria configurar uma regex em um loop foreach, pois há centenas de milhares de linhas
Jonathan

$ email = DB :: table ('users') -> where ('id', '=', 1) -> only ('email');
ytsejam

ele é chamado de criador de consultas fluente nos documentos.
ytsejam

Se eu pudesse marcar a resposta e seu comentário como resposta, eu o faria. Obrigado por me colocar na direção certa
Jonathan

Respostas:


235

Você é capaz de encontrar bancos de dados usando LIKE com esta sintaxe:

Model::where('column', 'LIKE', '%value%')->get();

1
não tão eficiente, gera "Erro fatal: nível máximo de aninhamento de função de '100' atingido, abortando! em ..."
Sasi varna kumar

@gsk Acho que você entra (usando o método with ()) e pode pesquisar a coluna normalmente. A sintaxe é provavelmente algo assim table.field.
Anthony

64

Se você precisa usar LIKE com frequência, pode simplificar um pouco o problema. Um método personalizado como () pode ser criado no modelo que herda o Eloquent ORM:

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

Então, você pode usar esse método da seguinte maneira:

User::like('name', 'Tomas')->get();

Esta é a maneira mais 'Laravel' de fazer isso. É apenas mais limpo e permite que você ajuste o escopo em um lugar, em vez de ter que dar a volta e ajustar cada um ->where().
Daniel Dewhurst

realmente amo essa resposta. Isso torna o modelo e seu uso muito elegantes, que é o objetivo do laravel.
deathemperor

29

Para sua informação, a lista de operadores (contendo like e todos os outros) está no código:

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

aviso Legal:

A resposta de Joel Larson está correta. Tenho meu voto positivo.

Espero que esta resposta esclareça mais o que está disponível por meio do Eloquent ORM ( aponta as pessoas diretamente ). Embora um link para a documentação seja muito melhor, esse link provou ser ilusório.


18

Use aspas duplas em vez de aspas simples, por exemplo:

where('customer.name', 'LIKE', "%$findcustomer%")

Abaixo está o meu código:

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

Se você não gosta de aspas duplas como eu, isso funcionará para você com aspas simples:

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.