我决定试用Laravel,并想为我的表单创建下拉列表。我在BaseController中创建了一个方便的方法,用于从数据库中获取数据。以下是功能列表:
protected function getList( $model, array $fields, $empty = 'Select option below' )
{
$options = array();
$owner = strtolower( $model ) . 's';
$records = $model::lists($fields[1], $fields[0]);
if( !empty( $records ) ){
foreach( $records as $key => $value ){
$options[$owner][$value] = $key;
}
}
$options[$owner][''] = $empty;
return $options;
}
然后在控制器中,你可以像这样使用它:
//Get groups
$groups = $this->getList( 'Group', array(
'name', 'id'
));
//Get Project Managers
$project_managers = $this->getList( 'ProjectManager', array(
'name', 'id'
));
select表单控件的输出有一个optgroup,它引用列表的所有者或模型。如何删除optgroup,使其不属于下拉列表的内容?
以下是表格的输出:
<div class="input select">
<label for="project_manager">Project Manager</label>
<select name="project_manager_id">
<optgroup label="projectmanagers">
<option value="1">Riyaadh</option>
<option value="2">Luyanda</option>
<option selected="selected" value="">Select option below</option>
</optgroup>
</select>
</div>
您正在使用此行在getLists
方法中添加另一个级别;$options[$owner][$value] = $key;
,这就是添加optgroup的原因,为了摆脱这种情况,将行更改为$options[$value] = $key;
。
您可以选择将getLists
函数的代码缩减为以下代码:;
protected function getList( $model, array $fields, $empty = 'Select option below' )
{
$options = array();
$owner = strtolower( $model ) . 's';
$records = $model::lists($fields[1], $fields[0]);
if( !empty( $records ) ){
$options = array_flip($records);
}
$options[''] = $empty;
return $options;
}
这使用array_flicp方法,该方法将键作为值交换,将值作为键交换。
试试这个。。。
$SchoolDetails = GeneralSettingModel::lists('SchoolName', 'id');
or
$SchoolDetails = DB::table('tablename')->lists('SchoolName', 'id');
{{ Form::select('SchoolName',array(''=>'Select School')+$SchoolDetails,null, array('id'=> 'SchoolName'))}}
输出:
<select id="SchoolName" name="SchoolName">
<option value="" selected="selected">Select School</option>
<option value="1">test</option>
<option value="2">test355wrew</option>
<option value="3">GOVT</option>
<option value="4">Kumaraguru</option>
<option value="5">valavan</option>
</select>
您可以通过添加ID来选择来使用JQuery删除
$(function () {
$("#mySelect").children().remove("optgroup");
});
正如Matt Burrow所建议的,事实证明我正在创建一个多维数组,该数组通过optgroup转换为列表。
我修改了我的函数,将记录所属的所有者排除在外。以下是我的完美工作函数(摘录):
...
if( !empty( $records ) ){
foreach( $records as $key => $value ){
$options[$value] = $key;
}
}
$options[''] = $empty;
...