查询生成器中的Laravel 5 multiple select()

查询生成器中的Laravel 5 multiple select(),laravel,laravel-5,laravel-5.1,Laravel,Laravel 5,Laravel 5.1,在laravel 5.1中,我想做 $myTable = MyTable->select('firstField'); if ($somethingTrue) { $myTable->select('secondField'); } $myTable->get(); 我希望同时选择firstField和secondField。 当然,上面的代码不起作用,即最后只选择第二个字段。 查询生成器类提供的函数是否可以完全满足我的要求?是的,您可以使用addSelect(

在laravel 5.1中,我想做

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

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

$myTable->get();
我希望同时选择firstField和secondField。
当然,上面的代码不起作用,即最后只选择第二个字段。


查询生成器类提供的函数是否可以完全满足我的要求?

是的,您可以使用
addSelect()

从:

如果已有查询生成器实例,并且希望将列添加到其现有select子句中,则可以使用addSelect方法:


此外,(与书面文档一致)还可以进一步说明核心类上可用的函数

接受的答案可能更优雅,但您也可以为select子句使用字段数组

$fields = ['firstField'];

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

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

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();
    $fields = ['firstField'];

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

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

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