Laravel-5'LIKE'等效(口才)


142

我正在使用以下代码使用Laravel 5从数据库中提取一些结果。

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

但是,orWhereLike似乎与任何结果都不匹配。该代码根据MySQL语句产生了什么?

我正在尝试实现以下目标:

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

Answers:


379

如果要查看数据库中正在运行的内容,请查看运行了dd(DB::getQueryLog())哪些查询。

试试这个

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

35
这个查询SQL注入保护?
partho

23
@partho是的。Laravel会筛选作为方法的第三个参数传递的整个字符串where
Finesse

8
在注入保护的情况下,您可能需要检查用户输入中是否有意外的百分比。例如,LIKE“%John%”和LIKE“ John%”的效果有所不同(您可能只打算后者)。还请考虑空输入,然后考虑单独输入“%”,这也可能导致上述代码产生意想不到的结果。
伊恩·弗莱顿

4
同意伊恩。Laravel仅进行部分转义。如果您没有正确地逃避LIKE,仍然有很多恶作剧的可能。方法如下: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_legs','like','%'。$ legalId。'%'),其中loan_legs是序列化字段
sadiq rashid

7

我对此有范围,希望对您有所帮助。

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

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

用法:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.