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!

Jonathan
fuente
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();
Joel Larson
fuente
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();
Yaroslav
fuente
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.

decano grande
fuente
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");
}
Myint Thu Lwin
fuente
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'));
Sinan Eldem
fuente