2012-11-26 3 views
0

DB criterias를 저장하고 쿼리를 필터링하는 데 사용하려는 경우 - Laravel Fluent Query Builder로 쿼리를 작성하는 방법은 무엇입니까? 어쩌면 당신은이 배열을 추가하여 OR/AND를 리팩토링하여 그러한 조건으로 복잡한 필터를 만들 수있는 조언을 줄 수 있습니까? 감사! 당신이 정말 원하는 방식으로 일을 설정 한 경우Laravel에서 criterias 배열로 유창한 쿼리를 작성하는 방법

$array = array(
    '0' => array(
     'table' => 'users', 
     'column' => 'name', 
     'criteria' => 'LIKE' 
     'value' => 'John' 
    ), 
    '1' => array(
     'table' => 'groups', 
     'column' => 'name', 
     'criteria' => 'NOT LIKE' 
     'value' => 'Administrator' 
    ), 
    ... 
) 

답변

1

, 배열

의 인덱스에 대한 플래그를 설정하는 스위치 성명을 발표 : 예를 들어

나는 데이터베이스에서 이러한 기준과 만든 배열을 읽으면

switch ($query) 
{ 
case 0: 
    $this->get_data($x); 
    break; 
case 1: 
    $this->get_data($x); 
    break; 
case 2: 
    $this->get_data($x); 
    break; 
default: 
    Return FALSE; 
} 
public function get_data($x){ 
$value = DB::table($array[$x]['table']) 
->where($array[$x]['name'], $array[$x]['criteria'], $array[$x]['value']) 
->get(); 

Return $value; 
} 

그러나 저는 전혀 조언하지 않습니다. 쿼리 필터를 배열에 저장하는 대신 모델에서 메서드를 만들어야한다고 생각합니다. 이렇게하면 가독성, 모듈성 및 재사용 가능한 코드가 도움이됩니다.

public function get_user_by_name($name){ 
$user = DB::table('users')->where('name', 'LIKE', '%'.$name.'%')->get(); 
return $user; 
} 

public function get_group_by_name($name, $criteria = 'LIKE'){ 
$groups = DB::table('groups')->where('name', $criteria, '%'.$name.'%')->get(); 
return $groups; 
} 

http://laravel.com/docs/database/fluent

+0

좋아! 사용자가 모델, 열 및 레코드 수를 선택하여 필터링 할 수 있기 때문에 필요합니다. – Orbitum

+0

나는 get()을 메서드 안에 넣지 않고 컨트롤러 (또는 호출자)에서 호출한다. 이렇게하면 개체와 상호 작용할 수 있습니다 (일명 페이지 매김, 세련된 검색, ...) –

관련 문제