라 라벨에서 Eloquent ORM을 사용하여 LIKE를 사용하여 데이터베이스 검색 수행


94

Eloquent의 활성 레코드 빌딩을 사용하여 검색 쿼리를 작성하고 싶지만 LIKE 검색이 될 것입니다. 나는를 발견 User::find($term)하거나 User::find(1), 그러나 이것은 같은 문을 생성하지 않습니다. 나는 직접적인 대답을 찾고 있지는 않지만 누군가가 적어도 나에게 방향을 알려줄 수 있다면 그것은 좋을 것입니다!


2
laravel.com/docs/database/eloquent .. 문서를 사용할 수 있습니다. 매우 명확합니다.
ytsejam 2012

2
이 페이지를 본 적이 있는데 와일드 카드 검색에 대해 아무것도 보지 못했습니다. 또한 수십만 개의 행이 있기 때문에 foreach 루프에서 정규식을 설정하고 싶지 않았습니다
Jonathan

$ email = DB :: table ( 'users')-> where ( 'id', '=', 1)-> only ( 'email');
ytsejam 2012

문서에서는 유창한 쿼리 작성기라고합니다.
ytsejam 2012

답변과 귀하의 의견을 답변으로 표시 할 수 있다면 그렇게 할 것입니다. 올바른 방향으로 날 점점 주셔서 감사합니다
조나단

답변:


235

다음 구문으로 LIKE를 사용하여 데이터베이스 찾기를 수행 할 수 있습니다.

Model::where('column', 'LIKE', '%value%')->get();

1
그렇게 효율적이지 않은 경우 "치명적인 오류 : 최대 함수 중첩 수준 '100'에 도달했습니다. 중단 중! in ..."
Sasi varna kumar

@gsk 나는 당신이 (with () 메소드를 사용하여) 가입하고 평소와 같이 열을 검색 할 수 있다고 생각합니다. 구문은 아마도 table.field.
Anthony

64

LIKE를 자주 사용해야하는 경우 문제를 약간 단순화 할 수 있습니다. Eloquent ORM을 상속하는 모델에서 ()와 같은 사용자 지정 메서드를 만들 수 있습니다.

public  function scopeLike($query, $field, $value){
        return $query->where($field, 'LIKE', "%$value%");
}

따라서 다음과 같은 방식으로이 방법을 사용할 수 있습니다.

User::like('name', 'Tomas')->get();

이것이 더 '라 라벨'방식입니다. 그것은 단지 더 깨끗하고 스코프를 한곳에서 조정할 수 있습니다 ->where().
Daniel Dewhurst

이 답변을 정말 좋아합니다. 이것은 laravel이 무엇인지에 대한 모델과 그 사용법을 매우 우아하게 만듭니다.
deathemperor

29

참고로 연산자 목록 ( like 및 기타 모두 포함)은 코드에 있습니다.

/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php

protected $operators = array(
    '=', '<', '>', '<=', '>=', '<>', '!=',
    'like', 'not like', 'between', 'ilike',
    '&', '|', '^', '<<', '>>',
    'rlike', 'regexp', 'not regexp',
);

부인 성명:

Joel Larson의 대답이 맞습니다. 내 찬성 투표를 받았습니다.

나는이 대답은 설득력 ORM을 통해 (사용 가능한 무엇에 더 많은 빛을 비춰 바라고 있어요 권리 직접에서 포인트 명 ). 문서에 대한 링크가 훨씬 낫지 만 그 링크는 그 자체로 이해하기 어려운 것으로 입증되었습니다.


18

작은 따옴표 대신 큰 따옴표를 사용하십시오.

where('customer.name', 'LIKE', "%$findcustomer%")

아래는 내 코드입니다.

public function searchCustomer($findcustomer)
{
    $customer = DB::table('customer')
                  ->where('customer.name', 'LIKE', "%$findcustomer%")
                  ->orWhere('customer.phone', 'LIKE', "%$findcustomer%")
                  ->get();

    return View::make("your view here");
}

3

나처럼 큰 따옴표가 마음에 들지 않으면 작은 따옴표로 작동합니다.

$value = Input::get('q');
$books = Book::where('name', 'LIKE', '%' . $value . '%')->limit(25)->get();

return view('pages/search/index', compact('books'));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.