Laravel-5 'LIKE' equivalente (Elocuente)


143

Estoy usando el siguiente código para obtener algunos resultados de la base de datos con Laravel 5.

BookingDates::where('email', Input::get('email'))->orWhere('name', 'like', Input::get('name'))->get()

Sin embargo, orWhereLike no parece coincidir con ningún resultado. ¿Qué produce ese código en términos de declaraciones MySQL?

Estoy tratando de lograr algo como lo siguiente:

select * from booking_dates where email='my@email.com' or name like '%John%'

Respuestas:


380

Si desea ver qué se ejecuta en la base de datos, use dd(DB::getQueryLog())para ver qué consultas se ejecutaron.

Prueba esto

BookingDates::where('email', Input::get('email'))
    ->orWhere('name', 'like', '%' . Input::get('name') . '%')->get();

35
¿está protegida esta inyección de inyección SQL?
partho

23
@partho Sí. Laravel filtra toda la cadena que pasa como tercer argumento del wheremétodo.
Finesse

8
Mientras esté protegido por inyección, es posible que desee verificar el% inesperado en la entrada del usuario. Por ejemplo, LIKE "% John%" y LIKE "John%" funcionan de manera diferente (es posible que solo pretenda esto último). También considere la entrada vacía, y luego solo "%", lo que también podría conducir a resultados no deseados del código anterior.
Ian Fleeton

44
De acuerdo con Ian. Laravel solo escapa de forma parcial. Todavía hay muchas travesuras posibles si no escapas adecuadamente del LIKE. Así es como: stackoverflow.com/a/42028380/329062
Greg

9
$data = DB::table('borrowers')
        ->join('loans', 'borrowers.id', '=', 'loans.borrower_id')
        ->select('borrowers.*', 'loans.*')   
        ->where('loan_officers', 'like', '%' . $officerId . '%')
        ->where('loans.maturity_date', '<', date("Y-m-d"))
        ->get();

-> where ('loan_officers', 'like', '%'. $ officerId. '%') donde loan_officers es el campo serializado
sadiq rashid

7

Tengo alcances para esto, espero que ayude a alguien.

public function scopeWhereLike($query, $column, $value)
{
    return $query->where($column, 'like', '%'.$value.'%');
}

public function scopeOrWhereLike($query, $column, $value)
{
    return $query->orWhere($column, 'like', '%'.$value.'%');
}

Uso:

$result = BookingDates::whereLike('email', $email)->orWhereLike('name', $name)->get();

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.