我使用以下HTML来显示选定的下拉列表,其中包含数据库中的值以及列表中其他的其他值。它正确显示所选名称,但所选名称也会显示在列表中。
如何在下拉列表中删除第二次显示所选名称?这是使用下拉菜单的好方法吗?这里Jobcategory和Jobdetails相关联。
我正在使用Laravel 4.2,这是HTML:
//查看下拉表单以保存数据
<div class="large-6 columns">
<label>Job Category
<select name="category[]">
<option value="">Select Category</option>
@foreach(JobCategory::all() as $jcat)
<option value="{{ $jcat->id }}">{{ $jcat->name }}</option>
@endforeach
</select>
</label>
</div>
//编辑下拉表单以更新所选值
<div class="large-6 columns">
<label>Job Category
<select name="category[]">
<option value="{{$jobedit->jobcategory->id}}">{{$jobedit->jobcategory->name </option>
@foreach(JobCategory::all() as $jcat)
<option value="{{ $jcat->id }}">{{ $jcat->name }}</option>
@endforeach
</select>
</label>
</div>
// jobcategories的数据库表
id | name
1 | Accounting/Finance
2 | Advertisement/Event Mgt.
3 | .....
保存到jobdetails表后//
id | jobcategory_id | .......
1 | 5 | ...
我可以在编辑表单中检索jobcategory的值,但它在所选值中显示两次,而在所有jobcategory的列出值中显示另一个值。这是问题,我只想显示所选值,然后显示其他来自jobcategory表的其他值,而不会在下拉列表中选择重复值。请帮助。
//要编辑的控制器
public function getJobEdit($id)
{
$jobedit = JobDetail::find($id);
return View::make('employers.edit_single_jobs')->with('jobedit', $jobedit);
}
// JobDetail --model
public function jobcategory()
{
return $this->belongsTo('JobCategory');
}
// JobCategory --model
public function jobdetails()
{
return $this->hasMany('JobDetail', 'jobcategories');
}
答案 0 :(得分:1)
看看laravel的Forms & HTML帮手。
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S');
其中第一个参数是select
框的名称。第二个参数是框中所有条目的数组,最后一个参数确定哪个数组元素是选定的数组。
在你的情况下,它看起来像这样:
{{ Form::select(
'categoryName',
array(
'Accounting/Finance' => 'Accounting/Finance',
'Advertisement/Event Mgt.' => 'Advertisement/Event Mgt.',
// to be continued ...
),
'$cat->category_name'
); }}
//修改
<div class="large-6 columns">
<label>Job Category
{{ Form::select('category[]', ['' => 'Select a category'] + $all_categories, $jobedit->jobcategory->id) }}
</select>
</label>
</div>
其中$all_categories
应该是所有类别的数组,如第一个示例中所示。您可以从JobCategory::all()
获取此信息。
答案 1 :(得分:0)
这就是我在项目中设置下拉菜单的方法。我在我的控制器中准备数据(你显然需要为此设置一个路由和控制器,我假设你已经完成了):
<强>控制器强>
public function index()
{
$categories = \Category::lists('name', 'id')->orderBy('name'); // assuming you have a Category model
view('categories', compact('categories'));
}
然后你可以使用Peh提到的Forms和HTML帮助器,这在Laravel 5中不是默认的,所以你需要使用composer将它添加到你的项目中。为此,请运行composer install illuminate/html
或将"illuminate/html": "~5.0"
添加到composer.json
文件,然后运行composer install。然后,您需要在'Illuminate\Html\HtmlServiceProvider'
数组中将config/app.php
添加到providers
,然后将'Form' => 'Illuminate\Html\FormFacade'
和'HTML' => 'Illuminate\Html\HtmlFacade'
添加到aliases
数组中文件。一旦对其进行了排序,您就可以在视图中使用Form和HTML帮助器,如下所示:
查看强>
{{ Form::select('categoryName', ['' => 'Select a category'] + $categories) }}
如果使用把手,您的视图需要保存为filename.blade.php
,否则echo
标记内的<?php ?>
。
希望能帮到你。