【问题标题】:Issue when trying to populate a drop-down with database values尝试使用数据库值填充下拉列表时出现问题
【发布时间】:2015-08-16 03:28:30
【问题描述】:

我正在使用以下 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>

//工作类别的数据库表

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');
}   

【问题讨论】:

  • laravel 提供了一个 from_select from 助手,你可以像{!! Form::select('cities_id', $citys, Input::old('cityes_id'),array('class' =&gt; 'form-control')) !!}一样轻松管理它
  • {{ $cat-&gt;category_name }} 中有什么内容??

标签: mysql laravel laravel-4 eloquent


【解决方案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()得到这个。

【讨论】:

  • 我试过了,但我的问题是所选项目很好地显示在菜单中,但它也显示在列表菜单中。我只想在菜单中显示一次。请考虑这个来编辑菜单。 @Peh
  • 抱歉,请给我们更多信息(编辑您的原始问题)。我发布的答案不会两次列出任何项目,除非您将其两次放入数组中。请向我们提供有关您在做什么的更多信息,否则我们无能为力。
  • 是的,这是因为您没有按照我在回答中的建议将 Form::select 助手用于您的编辑下拉菜单。使用它,您的双重输入就消失了。
【解决方案2】:

这就是我在项目中设置下拉菜单的方式。我在我的控制器中准备数据(你显然需要为此设置路由和控制器,我假设你已经这样做了):

控制器

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' 添加到providers 数组中的config/app.php,然后将'Form' =&gt; 'Illuminate\Html\FormFacade''HTML' =&gt; 'Illuminate\Html\HtmlFacade' 添加到同一文件中的aliases 数组中。排序后,您可以在视图中使用 Form 和 HTML 帮助器,如下所示:

查看

{{ Form::select('categoryName', ['' => 'Select a category'] + $categories) }}

如果使用把手,您的视图需要保存为filename.blade.php,否则echo 将其保存在&lt;?php ?&gt; 标记中。

希望对您有所帮助。

【讨论】:

  • 但我需要在下拉菜单中显示选定的默认文件才能编辑下拉菜单。 @haakym
  • 对不起,我不明白。默认文件是指默认选项吗?如果您想要默认选择的选项,请将选项值作为 Form::select() 函数的第三个参数。
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多