Подтвердить что ты не робот

Laravel 5 multiple select() в построителе запросов

В laravel 5.1 я хочу сделать, например

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

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

$myTable->get();

где я хочу, чтобы как firstField, так и secondField были выбраны.
Конечно, приведенный выше код не работает, т.е. В конце выбирается только второй.
Есть ли функция, предоставляемая классом построителя запросов, который может делать именно то, что я хочу?

4b9b3361

Ответ 1

Да, вы можете использовать addSelect()

В Документация Query Builder в разделе "Выбирает" :

Если у вас уже есть экземпляр построителя запросов и вы хотите добавить столбец в существующее предложение select, вы можете использовать метод addSelect:

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

Кроме того, документация по API (как указано в письменной документации) также может пролить дополнительный свет на то, какие функции доступны для основных классов.

Ответ 2

Принятый ответ, вероятно, более изящный, но вы также можете просто использовать массив полей для предложения select.

$fields = ['firstField'];

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

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

Ответ 3

mwallisch answer лучше, чем принято, потому что, если у вас есть несколько мест, где вы определяете selects, тогда 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();