[英]Laravel drop down multiple values from DB in drop down
在Laravel下拉列表中,是否可以在下拉列表中包含多个值?
通常,您将编写这样的命令来获取名称和选择框的ID。
Project::where('project_id', '=', Session::get('project_id'))->lists('project_name', 'id');
它将像这样下降
<select>
<option value="13">12345</option>
<option value="16">14-100</option>
<option value="17">14-200</option>
<option value="31">987</option>
</select>
我想知道是否可以显示它在数据库中显示的另一个值,例如created_by,所以它看起来像这样。
<select class="form-control" name="project">
<option value="13">12345 Billy user</option>
<option value="16">14-100 Sally user</option>
<option value="17">14-200 Thomas user</option>
<option value="31">987 Lola user</option>
</select>
这样的事情可能吗?
您可以在控制器中获得所需的字段:
$projects = Project::where('project_id', '=', Session::get('project_id'))->get('id', 'project_name', 'created_by');
然后将其传递给视图:
return View::make('my.view', array('projects' => $projects))
;
您可以在此处手动创建选项标签:
<select class="form-control" name="project">
@foreach($projects as $project)
<option value="{{ $project->id }}">{{ $project->project_name }} {{ $project->created_by }}</option>
@endforeach
</select>
这里有几个选项。
您可以直接在SQL中进行操作。 这将保留服务器端的所有内容,并且不会占用任何内存或时间来构建模型。
Project::where('project_id', '=', Session::get('project_id'))
->lists(DB::raw('CONCAT(project_name, " ", created_by)'), 'id');
但是,如果您的逻辑稍微复杂一些,或者您正在寻找更“ Laravel式”的解决方案,则可以在Project模型上创建访问器方法。 使用此方法,最终将在调用list方法之前创建所有模型:
// model
class Project extends Eloquent {
// accessor method to provide 'name_by' attribute
public function getNameByAttribute() {
return $this->project_name . ' ' . $this->created_by;
}
}
// if you limit the select, make sure you at least select the fields you need
$projects = Project::select('id', 'project_name', 'created_by')
->where('project_id', '=', Session::get('project_id'))
->get();
// call lists on the Collection of models, which will allow use of the accessor
$projectList = $projects->lists('name_by', 'id');
如果您有兴趣,Laravel访问器的文档在这里 。
public static function tableListToDropDown($tableName='',$nameField='',$idField='')
{
if ($idField == null)
{
$idField = "id";
}
$listFiledValues = DB::table($tableName)->select($idField,$nameField)->get();
$selectArray=[];
foreach ($listFiledValues as $listFiledValue)
{
$selectArray[$listFiledValue->$idField] = $listFiledValue->$nameField;
}
return $selectArray;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.