2015-11-02 54 views
12

在laravel 5.1,我想要做像Laravel 5多種選擇()在查詢生成器

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

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

$myTable->get(); 

其中欲被選擇既firstField & secondField。
當然上面的代碼不起作用,即最後只選擇第二個字段。

是否有任何功能提供的查詢生成器類,可以做到我想要的?

回答

13

是的,你可以使用addSelect()

Query Builder documentation under "Selects"

如果你已經有一個查詢生成器實例,您希望將列添加到現有的SELECT子句中,你可以使用addSelect方法:

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

另外,API documentation(如並列的書面documentat離子)也可以闡明核心類可用的功能。

2

接受的答案可能更優雅,但您也可以爲您的select子句使用一組字段。

$fields = ['firstField']; 

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

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

mwallisch的答案是優於接受一個,因爲如果你有,你要定義選擇,然後addSelect不會工作,多個地方。

例如,下面的代碼會拋出錯誤

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