[php] Laravel-5 ‘LIKE’동등 (Eloquent)

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


답변

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


답변

나는 이것에 대한 범위가 있으며, 누군가를 돕기를 바랍니다.

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


답변

매개 변수를 쿼리에 전달하는 모범 사례를 따르면 이것이 더 낫습니다.

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

Laravel 5.5 설명서에서 확인할 수 있습니다.

라 라벨 스카우트를 사용하여 쉽게 검색 할 수 있습니다.
다음은 설명서입니다.


답변