Laravel-5'LIKE'相当于(Eloquent)

V4n*_*ll4 121 php mysql laravel-5

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

BookingDates::where('email', Input::get('email'))->orWhere('name', 'like', Input::get('name'))->get()
Run Code Online (Sandbox Code Playgroud)

但是,orWhereLike似乎不匹配任何结果.该代码在MySQL语句方面产生了什么?

我正在尝试实现以下内容:

select * from booking_dates where email='my@email.com' or name like '%John%'
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Paw*_*zad 325

如果要查看数据库dd(DB::getQueryLog())中运行的内容,请查看运行的查询.

试试这个

BookingDates::where('email', Input::get('email'))
    ->orWhere('name', 'like', '%' . Input::get('name') . '%')->get();
Run Code Online (Sandbox Code Playgroud)

  • 是这个查询sql注入保护? (24认同)
  • @partho是的.Laravel将您传递的整个字符串作为`where`方法的第三个参数进行筛选. (18认同)
  • 注入保护时,您可能需要检查用户输入中的意外%.例如,LIKE"%John%"和LIKE"John%"执行的方式不同(您可能只打算使用后者).还要考虑空输入,然后单独考虑"%",这也可能导致上述代码的意外结果. (7认同)
  • 同意伊恩。Laravel仅进行部分转义。如果您没有正确地逃避LIKE,仍然有很多恶作剧的可能。方法如下:/sf/answers/2941986631/ (3认同)
  • 我添加了 `preg_replace("/[^A-Za-z0-9 ]/", '', $search);` 因为我不需要特殊字符,并且它也可以保护它免受 `%` 注入 (2认同)

Ole*_*leg 18

我有这个范围,希望它可以帮助某人。 https://laravel.com/docs/master/eloquent#local-scopes

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

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

用法:

$result = BookingDates::whereLike('email', $email)->orWhereLike('name', $name)->get();
Run Code Online (Sandbox Code Playgroud)


小智 14

$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();
Run Code Online (Sandbox Code Playgroud)


M M*_*han 10

下面提到的查询对我有用,也许对某人会有帮助。

 $platform = DB::table('idgbPlatforms')->where('name', 'LIKE',"%{$requestedplatform}%")->first();
Run Code Online (Sandbox Code Playgroud)


Jar*_*Dmz 9

我认为这更好,遵循将参数传递给查询的良好做法:

BookingDates::whereRaw('email = ? or name like ?', [$request->email,"%{$request->name}%"])->get();
Run Code Online (Sandbox Code Playgroud)

您可以在文档 Laravel 5.5 中看到它。

您还可以使用 Laravel scout 并简化搜索。 这是文档。