Php 不带optgroup的Laravel下拉列表
我决定试用Laravel,并想为我的表单创建下拉列表。我在BaseController中创建了一个便利方法,用于从数据库获取数据。下面是函数列表:Php 不带optgroup的Laravel下拉列表,php,html,laravel,laravel-4,Php,Html,Laravel,Laravel 4,我决定试用Laravel,并想为我的表单创建下拉列表。我在BaseController中创建了一个便利方法,用于从数据库获取数据。下面是函数列表: protected function getList( $model, array $fields, $empty = 'Select option below' ) { $options = array(); $owner = strtolower( $model ) . 's'; $records = $model:
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>
项目经理
里亚达
鲁延达
选择下面的选项
您可以通过添加ID以选择来删除
$(function () {
$("#mySelect").children().remove("optgroup");
});
试试这个
$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>
选择学校
测试
鹪鹩
政府
库马拉古鲁
瓦拉文
您正在使用此行在getlist
方法中添加另一个级别<代码>$options[$owner][$value]=$key,这是添加您的optgroup的内容,要摆脱此问题,请将行更改为$options[$value]=$key代码>
或者,您可以将getlist
函数的代码减少为以下代码:
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;
}
这使用了数组翻转方法,它将键交换为值,将值交换为键。正如Matt Burrow所建议的那样,结果证明我正在创建一个多维数组,该数组被转换为带有optgroup的列表
我修改了我的函数以排除记录所属的所有者。以下是我完美的工作功能(摘录):
在select下拉列表中获取OPTGROUP的原因是您正在getLists方法中添加它们,在第行,$options[$owner][$value]=$key当传递到表单::select()
的数据中存在多维数组(关联键是组的标签)时,选择会为每个添加optgroup,删除这些,将不会有任何optgroup。简而言之,只需返回您的$records
变量,所有optgroup都将消失。嗨,马特!在我的可重用BaseController函数上只返回$records变量,只会用记录ID填充下拉列表。那么,另一种解决方法是更改$options[$owner][$value]=$key代码>此$options[$value]=$key代码>,如前所述,您正在向数组中添加另一个级别,从而添加optgroup。谢谢Matt。这解决了我的问题。我知道应该有办法做到这一点。我们的想法是不要用两行代码把我的控制器弄得乱七八糟,以获得模型列表,因此我们希望创建一些可重用的东西。你救了我一天…-)添加为答案@LuyandaSikoHi Kamlesh!你的攻击只留下空字符串“Select-blah-blah-blah”…我的下拉列表现在已经检查过了,可以正常工作了。我只是想知道它是否把我这边的东西都拿走了。我将尝试复制这一点,看看我是否做错了什么,但我遇到的问题已经解决了。后端代码行为的解决方案从来都不是前端代码。需要澄清的是。。。GeneralSettingModel是Laravel提供的对象吗?不是。我们需要创建自定义模型
...
if( !empty( $records ) ){
foreach( $records as $key => $value ){
$options[$value] = $key;
}
}
$options[''] = $empty;
...