尝试使用数据库值填充下拉列表时出现问题

时间:2015-06-02 11:08:46

标签: mysql laravel laravel-4 eloquent

我使用以下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');
}   

2 个答案:

答案 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 ?>

希望能帮到你。