Usando Eloquent ORM en Laravel para realizar la búsqueda de la base de datos usando LIKE


94

Quiero usar la construcción de registros activos de Eloquent para construir una consulta de búsqueda, pero será una búsqueda LIKE. He encontrado el User::find($term)or User::find(1), pero esto no genera una declaración similar. No estoy buscando una respuesta directa, pero si alguien pudiera al menos darme una dirección para mirar, ¡sería genial!


2
laravel.com/docs/database/eloquent .. puedes usar documentación, es muy claro.
ytsejam

2
He visto esta página, pero no vi nada sobre búsquedas con comodines. Tampoco quería configurar una expresión regular en un bucle foreach ya que hay cientos de miles de filas
Jonathan

$ correo electrónico = DB :: tabla ('usuarios') -> donde ('id', '=', 1) -> solo ('correo electrónico');
ytsejam

se denomina generador de consultas fluido en los documentos.
ytsejam

Si pudiera marcar la respuesta y su comentario como la respuesta, lo haría. Gracias por llevarme en la dirección correcta
Jonathan

Respuestas:


235

Puede buscar bases de datos usando LIKE con esta sintaxis:

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

1
no tan eficiente, arroja "Error fatal: se alcanzó el nivel máximo de anidación de funciones de '100', ¡abortando! en ..."
Sasi varna kumar

@gsk Creo que te unes (usando el método with ()) y luego puedes buscar en la columna como de costumbre. La sintaxis probablemente sea algo así como table.field.
Anthony

64

Si necesita usar LIKE con frecuencia, puede simplificar un poco el problema. Se puede crear un método personalizado como () en el modelo que hereda el ORM de Eloquent:

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

Entonces puedes usar este método de tal manera:

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

Esta es la forma más 'Laravel' de hacer esto. Es más limpio y le permite ajustar el alcance en un solo lugar, en lugar de tener que ir y ajustar cada uno ->where().
Daniel Dewhurst

realmente amo esta respuesta. Esto hace que el modelo y su uso sean muy elegantes, de eso se trata laravel.
muerto el

29

Para su información, la lista de operadores (que contiene me gusta y todos los demás) está en código:

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

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

Descargo de responsabilidad:

La respuesta de Joel Larson es correcta. Tengo mi voto a favor.

Espero que esta respuesta arroje más luz sobre lo que está disponible a través de Eloquent ORM ( señala a las personas directamente ). Si bien un enlace a la documentación sería mucho mejor, ese enlace ha demostrado ser difícil de alcanzar.


18

Utilice comillas dobles en lugar de comillas simples, por ejemplo:

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

A continuación se muestra mi 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

Si no le gustan las comillas dobles como a mí, esto le funcionará con comillas simples:

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

return view('pages/search/index', compact('books'));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.