2016-12-25 2 views
3

Laravelの新機能です。私は、laravelクエリービルダーを使用してクエリーを動的にしたい。
句がnull where句がnullでない場合、クエリはLaravel dynamicクエリービルダーを使用したクエリ

SELECT * FROM $tbl WHERE hello = "world" 

LaravelのORMの作品になります場合は、クエリが

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(); 

OR

あなたはとしてwhenメソッドを使用することができますこれを試して。 $変数に何かが含まれていると、クエリが実行されます。それ以外の場合は、Aモデルからすべてのデータが取得されます。

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

注:あなたのクエリは、あなたが)(代わりに、最初のクエリビルダの末尾に()メソッドgetを使用する必要があり、複数の値を返す場合。 参照: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

この方法を使用すると、クエリに連鎖を追加できます。 –

関連する問題