2016-12-25 4 views
3

Laravel에서 새로 왔습니다. 나는 laravel 쿼리 빌더로 쿼리를 동적으로 만들고 싶다. 절은 where 절이 아닌 경우는 null 쿼리쿼리 작성기를 사용하는 쿼리의 위치가 동적 인

SELECT * FROM $tbl WHERE hello = "world" 

Laravel은 ORM 작품이 될 것입니다 null의 경우 쿼리

SELECT * FROM $tbl 

될 경우
는 일반적으로 나는 PHP

$where = array(
    'hello' => 'world' 
); 

function get($where = null){ 
    if($where == "") $where = ""; 
    //Function which converts where clause into queries 
    wheretoqueries($where); //converts where clause 
    $sql = "SELECT * FROM $tbl $where"; 
    return $sql; 
} 
echo get($where); 

동적 쿼리를 만들 수 있습니다 키와 값이있는 경우 where 절을위한 정밀도

A::where($where)->get(); 
,

null의 경우 다음과 같은 방법 당신은으로 where 쿼리를 체인 수

답변

1

:

$query = Model::query(); 

if (!empty($value)) { 
    $query->where('column', $value); 
} 

$query->get(); 

또는

당신은 when 방법을 사용할 수 있습니다 이 시도. $ 변수에 무언가가 포함되어 있으면 쿼리가 실행되고 그렇지 않으면 A 모델의 모든 데이터가 검색됩니다.

function get($where = null){ 
    if($where != null){ 
     A::where('field_name', '=', $where)->first(); 
    }else{ 
     A::all(); 
    } 
    } 

참고 : 쿼리는 다음() 대신 첫번째의 쿼리 빌더의 끝에서() 메소드 얻을 사용해야 하나 개 이상의 값을 반환하는 경우; 참조 : https://laravel.com/docs/5.3/queries#where-clauses

+0

내 대답이 도움이된다는 것을 알고 기쁘게 생각합니다. –

0

작동하지 않을 경우 :

Model::when($value, function ($query) use ($value) { 
     return $query->where('column', $value); 
    }) 
    ->get(); 
+0

이 방법을 사용하면 쿼리에 연결을 추가 할 수 있습니다. –

관련 문제