在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>
我想知道我是否可以在某些方面显示db中的其他值,例如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>
这样的事情可能吗?
答案 0 :(得分:2)
您可以在控制器中获取所需的字段:
$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>
答案 1 :(得分:2)
这里有几个选项。
您可以直接在SQL中执行此操作。这将保持服务器的一切,不会占用任何内存或时间建立模型。
Project::where('project_id', '=', Session::get('project_id'))
->lists(DB::raw('CONCAT(project_name, " ", created_by)'), 'id');
但是,如果您的逻辑稍微复杂一些,或者您正在寻找更多“Laravel-ish”解决方案,则可以在Project模型上创建一个存取方法。使用此方法,您最终在调用lists方法之前创建所有模型:
// 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访问者的文档是here。
答案 2 :(得分:-1)
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;
}