Odpowiednik Laravel-5 `` LIKE '' (elokwentny)


143

Używam poniższego kodu, aby pobrać niektóre wyniki z bazy danych za pomocą Laravel 5.

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

Jednak orWhereLike nie wydaje się pasować do żadnych wyników. Co daje ten kod pod względem instrukcji MySQL?

Próbuję osiągnąć coś takiego:

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

Odpowiedzi:


380

Jeśli chcesz zobaczyć, co jest uruchamiane w bazie danych, użyj polecenia, dd(DB::getQueryLog())aby zobaczyć, jakie zapytania zostały uruchomione.

Spróbuj tego

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

35
czy to zapytanie sql injection jest chronione?
partho

23
@partho Yes. Laravel ekranuje cały ciąg przekazany jako trzeci argument wheremetody.
Finesse

8
Chociaż jest chroniony przed iniekcją, możesz chcieć sprawdzić nieoczekiwany% w danych wejściowych użytkownika. Np. LIKE "% John%" i LIKE "John%" działają inaczej (możesz chcieć tylko to drugie). Weź również pod uwagę puste dane wejściowe, a następnie sam „%”, co również może prowadzić do niezamierzonych wyników z powyższego kodu.
Ian Fleeton,

4
Zgadzam się z Ianem. Laravel tylko częściowo ucieka. Nadal jest wiele psot, jeśli nie uciekniesz odpowiednio przed LIKE. Oto jak: 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();

-> gdzie ('license_officers', 'like', '%'. $ officId. '%') gdzie credit_officers jest polem z
numerami seryjnymi

7

Mam do tego zakresy, mam nadzieję, że to komuś pomoże.

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

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

Stosowanie:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.