我使用下面的代码从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%'

如果您想要查看在数据库中运行了什么,请使用dd(DB::getQueryLog())来查看运行了什么查询。

试试这个

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

我认为这样更好,遵循向查询传递参数的良好实践:

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

好:

BookingDates::where('email',$request->email)
    ->orWhere('name','like',"%{$request->name}%")->get();

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

您也可以使用Laravel侦察,使搜索更容易。 这里是文档。


$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();

我有这个仪器,希望能帮到别人。 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.'%');
}

用法:

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

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

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

如果您正在使用Postgres,则可以使用关键字ILIKE而不是LIKE来根据活动地区使匹配不区分大小写。这不是SQL标准,而是一个PostgreSQL扩展。

这对我很管用。

User::where('name, 'ILIKE', $search)->get();

postgres文档


如果你想在控制器上使用它,你可以这样做:

$generatequery = 'select * from where is_active = 1 and blog_name like '%'.$blogs。'%'命令由updated_at desc, id desc';

$ bloglists = DB::select($generatequery);