在laravel 5.1中,我想做
$myTable = MyTable->select('firstField');
if ($somethingTrue) {
$myTable->select('secondField');
}
$myTable->get();
我想要firstField和amp; secondField被选中。
当然上面的代码不起作用,即最后只选择了secondField
查询构建器类提供的任何函数是否可以完全满足我的需求?
答案 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();