2016-10-11 2 views
0

티켓의 레이블을 저장할 테이블을 만들었습니다. 여러 라벨을 값 열에 쉼표 (,)로 구분 된 문자열로 저장했습니다.키/값 쌍의 Laravel 쿼리 작성기

+----+-----------+-------+---------------+---------------------+---------------------+ 
| id | ticket_id | key | value   | created_at   | updated_at   | 
+----+-----------+-------+---------------+---------------------+---------------------+ 
| 9 |  22 | label | Important,Bug | 2016-10-10 14:48:07 | 2016-10-10 14:48:07 | 
| 17 |  21 | label |    | 2016-10-10 16:46:13 | 2016-10-10 16:46:13 | 
+----+-----------+-------+---------------+---------------------+---------------------+ 

지금은 레이블을 검색하고 관련 TICKET_ID를 얻을 수있다는 내 검색어

답변

1

당신은 그런 일을 시도해야하는 쿼리를 작성 도와주세요 배열

array:1 [ 
    0 => "Important" 
] 

입니다 :

$query = Model::where('value','like','%' . $array[0] . '%'); 

for($i = 1; $i < sizeof($array); $i++) { 
    $query->orWhere('value','like','%' . $array[i] . '%'); 
} 

return $query->get(); 

경고, 첫 번째 where 메서드가 필요합니다 y를 5.3 릴리스 후에. 그 전에는 orWhere 절로 직접 시작할 수 있습니다.

이제는 사영 범위가 범위 제약 조건의 주요 부울을 존중합니다. 예를 들어, orWhere 제약 조건 으로 범위를 시작하는 경우 더 이상 일반화 된 위치로 변환되지 않습니다. 에이 기능 (예 : 루프 내에서 여러 개의 orWhere 제약 조건 추가)을 사용하는 경우 첫 번째 조건이 정상적인 경우 어디에서 부울 논리 문제가 발생하지 않는지 확인해야합니다 ( ).

+0

귀하의 답변을 주셔서 감사합니다,하지만 두 행 값을주고있다 그러나 그것은 단지 하나 개의 원료를 제공해야합니다. –

0
$filter = new Filter(); 
$query = $filter->where('key', 'label') 
       ->where(function($query) use($labels) { 
        for ($i = 0; $i < count($labels); $i++) { 
         $query->orWhere('value', 'LIKE', '%' . $labels[$i] . '%'); 
        } 
       }) 
       ->get(); 

return $query; 
관련 문제