2015-11-02 13 views
12

でlaravel 5.1では、私は両方のfirstField & secondFieldを選択することにしたいLaravel 5複数の(選択)クエリビルダ

$myTable = MyTable->select('firstField'); 

if ($somethingTrue) { 
    $myTable->select('secondField'); 
} 

$myTable->get(); 

のようにやりたいです。
もちろん、上記のコードは機能しません。つまり、最後にsecondFieldだけが選択されています。

クエリービルダークラスが提供している機能がありますか?

答えて

13

はい、あなたはQuery Builder documentation under "Selects"からaddSelect()

を使用することができます。

あなたがaddSelectを使用することができ、あなたはすでに、クエリビルダインスタンスを持っていて、その既存のselect句に列を追加したい場合は、方法:さらに

$query = DB::table('users')->select('name'); 
$users = $query->addSelect('age')->get(); 

、書き込まdocumentatに並置として API documentation(イオン)は、コアクラスでどのような機能が利用可能であるかについての追加の光を放つこともできます。

2

おそらくもっとエレガントですが、select句にフィールドの配列を使用することもできます。あなたは、その後addSelect文句を言わない仕事を選択を定義している複数の場所を持っている場合は、ので

$fields = ['firstField']; 

if ($someCondition) { 
    $fields[] = 'secondField'; 
} 

$result = DB::table('users')->select($fields)->get(); 
0

mwallischの答えは受け入れられて1よりも優れています。

例えば、次のコードは、エラーをスローします:

$myTable = MyTable->select('firstField'); 

if ($somethingTrue) { 
    $myTable->addSelect('secondField'); 
} 

if ($somethingElseTrue) { 
    $myTable->addSelect('thirdField'); 
} 

$myTable->get(); 

それが行うことができながらとして:

$fields = ['firstField']; 

    if ($somethingTrue) { 
     $fields[] = 'secondField'; 
    } 

    if ($somethingElseTrue) { 
     $fields[] = 'thirdField'; 
    } 

    $result = DB::table('users')->select($fields)->get();