不带optgroup的Laravel下拉列表


Laravel dropdown without optgroup

我决定试用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;
 ...