2017-11-29 9 views
1

문자열을 사용하는 함수가 있는데 (매우 넓은) 여러 필드 (일명 거의 모든 테이블의 내 DB 필드)와 일치합니다. 이것은 다소 불투명 한 것처럼 보이지만 작동합니다. 그러나 이것은 현재 나의 주요 관심 사항이 아닙니다.여러 개의 'orwhere'절이있는 모델 검색

다음과 같은 작업을 수행 할 수 있습니까? 'orwhere'가 레코드를 컬렉션으로 반환했음을 표시합니까? 나는 (결과보기에서) 문자열이 일치하는 레코드의 부분을 보여주고 싶습니다.

$apps = Application::all(); 
    $apps->where('bill_company_name', 'like', '%'.$request->filter.'%'); 
    $apps->orwhere('bill_address', 'like', '%'.$request->filter.'%'); 
    $apps->orwhere('bill_city', 'like', '%'.$request->filter.'%'); 
    ... 
    $apps = $apps->paginate(); 
    $apps->withPath('custom/url');  
    return $apps; 

는 내가 아마 (다시 기록에 대한 필터를 grepping 좀 더 많은 코드를 통해)보기에이 작업을 수행 할 수 있습니다 알고 있지만,이 옵션은 더 힘든 소리가 난다.

감사합니다.

답변

-1

당신은 시도 할 수 orwhere -> orWhere

https://laravel.com/docs/5.5/queries#where-clauses

+0

당신이 코드를 살펴있는 경우 네는, 당신은 내가 orWhere 문의 무리를 사용하고 볼 수 있습니다 ...하지만 난 알아 내기에 관심이있는 'orWhere'가 반환 된 컬렉션에 해당 레코드를 추가했습니다. – Romanulus

0

당신은 할 수 :

$records = Model::query(); 
$records = $records->where(‘field’, ‘value’); 
… 
$records_where = $records->orWhere(‘field’, ‘value’)->get(); 
if($records_where->isNotEmpty()){ 
     // save into array this one that matched 
} 
$records = Model::query(); 

을 그리고 일치하는 사람을 통해보기 반복 처리에 있지만,이 과정이 조용한 걸릴 수 있습니다 당신이 너무 많은 필드를 가지고 있다면 조금 ...

+0

아이디어는 바른 길에 있습니다. 나는 당신이 어쩌면 쓸데없는/부정확 한 나의 가정을 설명하는 데 도움을 주었다고 생각합니다. 아마도 나는 그 객체를 얻는데 논리가 묶이는 것보다 반환 된 객체를 사용하여 추가로 춤을 추고 싶을 것입니다 ... – Romanulus

0

귀하의 모델에

public function getMatch($str) { 
    if (strpos($this->bill_address, $str) !== false) { 
     return "bill_address"; 
    } elseif (...) { ... } 
} 
0

질문에 대한 답변이 없으므로 주제에 약간 벗어날 수는 있지만 나중에 도움이 될 수 있습니다. 이미 수행 한 작업이이 방법으로 조금 엉망이된다는 사실을 알고 있으므로 문제 해결을 권장합니다. 다른 기술. 예를 들어, lucene 검색 엔진 (Solr 및 elastic-search에서 사용됨)은 반환 된 레코드의 점수가 어떻게 구성되었는지를 자세히 보여주기 위해 사용할 수있는 디버그 기능을 제공하므로 쿼리가 어느 부분에 도달했는지 확인할 수 있습니다.

그리고 그 훨씬 더 빨리 : https://lucene.apache.org/solr/guide/6_6/common-query-parameters.html#CommonQueryParameters-ThedebugParameter