Setara Laravel-5 'LIKE' (Eloquent)


143

Saya menggunakan kode di bawah ini untuk menarik beberapa hasil dari database dengan Laravel 5.

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

Namun, orWhereLike tampaknya tidak cocok dengan hasil apa pun. Apa yang dihasilkan kode itu dalam hal pernyataan MySQL?

Saya mencoba mencapai sesuatu seperti berikut:

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

Jawaban:


380

Jika Anda ingin melihat apa yang dijalankan dalam database gunakan dd(DB::getQueryLog())untuk melihat pertanyaan apa yang dijalankan.

Coba ini

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

35
Apakah kueri injeksi sql ini dilindungi?
partho

23
@parto Ya. Laravel menyaring seluruh string yang Anda berikan sebagai argumen ketiga dari wheremetode ini.
Finesse

8
Saat injeksi terlindungi, Anda mungkin ingin memeriksa% yang tidak terduga dari input pengguna. Misalnya, LIKE "% John%" dan LIKE "John%" berkinerja berbeda (Anda mungkin hanya menginginkan yang terakhir). Pertimbangkan juga input kosong, dan kemudian dari "%" saja, yang juga dapat menyebabkan hasil yang tidak diinginkan dari kode di atas.
Ian Fleeton

4
Setuju dengan Ian. Laravel hanya melakukan pelarian sebagian. Masih ada banyak kerusakan yang mungkin terjadi jika Anda tidak melarikan diri dari LIKE. Begini caranya: 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();

-> di mana ('loan_officers', 'like', '%'. $ officerId. '%') di mana loan_officers adalah bidang serial
sadiq rashid

7

Saya memiliki ruang lingkup untuk ini, semoga membantu seseorang.

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

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

Pemakaian:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.