Laravel 5查询构建器中的多个select()

时间:2015-11-02 07:24:22

标签: laravel laravel-5 laravel-5.1

在laravel 5.1中,我想做

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

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

$myTable->get();

我想要firstField和amp; secondField被选中。
当然上面的代码不起作用,即最后只选择了secondField
查询构建器类提供的任何函数是否可以完全满足我的需求?

3 个答案:

答案 0 :(得分:17)

是的,您可以使用addSelect()

来自Query Builder documentation under "Selects"

  

如果您已经有一个查询构建器实例,并且希望在其现有select子句中添加一列,则可以使用addSelect方法:

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

此外,API documentation(与书面文档相似)还可以进一步阐明核心类可用的功能。

答案 1 :(得分:2)

接受的答案可能更优雅,但你也可以只为select子句使用一系列字段。

$fields = ['firstField'];

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

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

答案 2 :(得分: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();