2017-05-21 1 views
1

필터로 작동하는 입력 필드가있는 테이블이 있습니다. 관계가있는 Orders 테이블과 Users 테이블의 값이 있습니다.Laravel : 관계가있는 쿼리 작성기

예컨대 :

Order Id  | User Full Name | Order Price | Date    | 

[order filter] [user name filter]    [order date filter] 

어떻게 관계를 통해 사용자 테이블에서 값을 필터링 할 수 있습니다?

이 과정의 오류를 반환

public function name($name) 
{ 
    return $this->builder->where('name', 'LIKE', '%$name%')->orWhere('surname', 'LIKE', '%$name%'); 
} 

오류 :

QueryException in Connection.php line 770: 
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'where clause' (SQL: select count(*) as aggregate from `orders` where (`name` LIKE %$name% or `surname` LIKE %$name%)) 
+0

열 이름이'name' 또는'User Full Name'입니까? 오류 메시지가 매우 간단 명료합니다 ->'열을 찾을 수 없습니다 : '1054 알 수없는 열'이름 '에'where 절 '. 그래서'name' 컬럼은 존재하지 않으므로 실제 컬럼 이름은 무엇입니까? – Sean

+0

귀하의 질의는 주문 테이블에서 '이름'열을 찾고, 아마도 존재하는 관련 사용자 테이블에서는 찾지 않습니다. MySQL에서 쿼리를 작성하는 방법을 알고 있습니까? – sunomad

+0

@Sean, 그것이 존재하지 않는다는 것을 알고 있습니다. 사용자 테이블에서 검색하고 싶습니다. 주문 테이블은 그것과 관계가 있습니다. 문제는 어떻게 접근 할 것인가입니다. – Rudolph

답변

3

당신은 당신의 쿼리 빌더에 직접 조건을 추가하거나 범위를 만들 수 있습니다.

주문 모델에 추가하십시오.

public function scopeFilterUser($query, $name) 
{ 
    return $query->whereHas('user', function ($q) use ($name) { 
     $q->where('name', 'like', "%{$name}%") 
      ->orWhere('surname', 'like', "%{$name}%"); 
    }); 
} 

그렇게

$orders = Order::filterUser($name)->get(); 

이 조건을 직접 적용처럼 사용합니다.

$orders = Order::whereHas('user', function ($query) use ($name) { 
    $query->where('name', 'like', "%{$name}%") 
     ->orWhere('surname', 'like', "%{$name}%"); 
})->get(); 

편집 : 필터 방법에 따라.

public function name($name) 
{ 
    return $this->builder->whereHas('user', function ($q) use ($name) { 
     $q->where('name', 'like', "%{$name}%") 
      ->orWhere('surname', 'like', "%{$name}%"); 
    }); 
} 
+0

다른 필터 방법을 추가하지 않고도이를 수행 할 수 있습니까? 여기에있는 것처럼 전체 렌더링 된 테이블을 필터링하는 클래스가 하나 있습니다 - https://github.com/laracasts/Dedicated-Query-String-Filtering/blob/master/app/LessonFilters.php – Rudolph

+0

@ 루돌프 쿼리 범위를 필터 메서드로 변환했습니다. 나는 너를 위해 그것을 추가했다. 내 대답을 확인해. – Sandeesh

+0

고마워요! 매력처럼 작동합니다. – Rudolph

관련 문제