Laravel-5 如何使用 id 值和名称值填充数据库中的选择框

2022-08-30 09:22:54

我想使用illuminate\html创建一个如下选择框:

<select>
    <option value="$item->id">$item->name</option>
    <option value="$item->id">$item->name</option>
</select>

在我的控制器中,我尝试了这个:

public function create()
{
    $items = Items::all(['id', 'name']);

    return view('prices.create', compact('id', 'items'));
}

在我看来:

<div class="form-group">
    {!! Form::Label('item', 'Item:') !!}
    {!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>

问题是,而不是显示实体的所有信息。$item->name


答案 1

Laravel 提供了一个带有 lists() 函数的查询生成器

在你的情况下,你可以替换你的代码

$items = Items::all(['id', 'name']);

$items = Items::lists('name', 'id');

此外,还可以将其与其他查询生成器链接。

$items = Items::where('active', true)->orderBy('name')->lists('name', 'id');

来源:http://laravel.com/docs/5.0/queries#selects


Laravel 5.2 更新

非常感谢@jarry。正如你所提到的,Laravel 5.2的功能应该是

$items = Items::pluck('name', 'id');

$items = Items::where('active', true)->orderBy('name')->pluck('name', 'id');

ref: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0 -- 查看弃用列表


答案 2

Laravel >= 5.3 方法列表() 已弃用 使用 pluck()

$items = Items::pluck('name', 'id');

{!! Form::select('items', $items, null, ['class' => 'some_css_class']) !!}

这将为您提供一个选择框,其中包含与DB中的ID号相同的选择选项

例如,如果您的数据库表中有此内容:

id name
1  item1
2  item2
3  item3
4  item4

在选择框中,它会像这样

<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>

我发现pluck现在返回一个集合,你需要在pluck结束时添加->toArray()...所以像这样:pluck('name', 'id')->toArray();


推荐