Laravel 5 multiple select() в построителе запросов
В laravel 5.1 я хочу сделать, например
$myTable = MyTable->select('firstField');
if ($somethingTrue) {
$myTable->select('secondField');
}
$myTable->get();
где я хочу, чтобы как firstField, так и secondField были выбраны.
Конечно, приведенный выше код не работает, т.е. В конце выбирается только второй.
Есть ли функция, предоставляемая классом построителя запросов, который может делать именно то, что я хочу?
Ответы
Ответ 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();