Laravel-5 如何使用 id 值和 name 值从数据库填充 select 框
Laravel-5 how to populate select box from database with id value and name value
我想使用 illuminate\html 创建一个如下所示的 select 框:
<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
。
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 -- 查看弃用列表
只需将您的控制器更改为以下内容:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items));
}
你的观点是:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
<select class="form-control" name="item_id">
@foreach($items as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
</div>
希望这能解决您的问题
Laravel 使用数组 Form::select
。所以我传递了如下数组:
$datas = Items::lists('name', 'id');
$items = array();
foreach ($datas as $data)
{
$items[$data->id] = $data->name;
}
return \View::make('your view', compact('items',$items));
在您看来:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
控制器
$campaignStatus = Campaign::lists('status', 'id');
compact('campaignStatus') 将导致 [id=>status]; //示例 [1 => 'pending']
return view('management.campaign.index', compact('campaignStatus'));
查看
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
对于Laravel 5:
$items = Items::lists('name', 'id');
将一个项目推到集合的开头。
$items->prepend($value, $key = null);
Laravel >= 5.3 方法 lists() 已弃用,使用 pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ['class' => 'some_css_class']) !!}
这将为您提供一个 select 框,其中 select 选项与 DB
中的 ID 号相同
例如,如果您的数据库中有这个 table:
id name
1 item1
2 item2
3 item3
4 item4
在select框中会是这样
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>
我发现 pluck 现在 returns 一个集合,你需要在 pluck 的末尾添加 ->toArray() ......所以像这样:pluck('name', 'id')->toArray();
Laravel 5.*
在您的控制器中:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
在您看来:
{{ Form::select('organization_id', $items, null, []) }}
Laravel 5.3 使用 pluck($value, $key )
$value 显示在您的下拉列表中,$key 是 id
控制器
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
查看
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
试试这个。不使用控制器
{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
在你的控制器中,添加,
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
在您看来,使用
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
在select框中,会是这样,
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
我在pluck
之后添加了toArray()
$items = Item::pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
已经说了很多,但请记住,有时您不想将数据库中的所有记录输出到您的 select 输入字段.....关键示例 I一直在这个学校管理网站上工作,我必须在 select 语句中输出所有布告栏类别。这是我在控制器中编写的代码
布告栏:: groupBy()->pluck('category')->get();
这样你会得到不同的记录,因为它们已经分组,所以没有重复的记录
抱歉回复晚了
显然lists
方法已经在Laravel中deprecated
,但是你可以使用pluck方法。
例如:
Laravel 5.7
public function create()
{
$countries = Country::pluck('country_name','id');
return View::make('test.new')->with('countries', $countries);
}
并且在视图中,如果您是 FORM
组件只是作为
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
if 将生成下拉列表
但我有一种情况表明 select 国家/地区作为第一个选项和空值
<option value="" selected="selected">--Select Country--</option>
所以我提到了
并修复了它,但以后如果我想更改它,我讨厌在视图中更改它
因此基于
创建了辅助函数并放置在国家/地区模型中
public static function toDropDown($tableName='',$nameField='',$idField='',$defaultNullText='--Select--')
{
if ($idField == null)
{
$idField="id";
}
$listFiledValues = DB::table($tableName)->select($idField,$nameField)->get();
$selectArray=[];
$selectArray[null] = $defaultNullText;
foreach ($listFiledValues as $listFiledValue)
{
$selectArray[$listFiledValue->$idField] = $listFiledValue->$nameField;
}
return $selectArray;
}
并在控制器中
public function create()
{
$countries = Country::toDropDown('countries','name','id','--Select Country--');
return View::make('test.new')->with('countries', $countries);
}
终于在视图中
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
结果符合预期,但我强烈建议使用pluck()
方法
要填充 laravel 中的下拉 select 框,我们必须按照以下步骤操作。
我们必须从控制器中获取这样的值:
public function addCustomerLoyaltyCardDetails(){
$loyalityCardMaster = DB::table('loyality_cards')->pluck('loyality_card_id', 'loyalityCardNumber');
return view('admin.AddCustomerLoyaltyCardScreen')->with('loyalityCardMaster',$loyalityCardMaster);
}
同样我们可以在视图中显示:
<select class="form-control" id="loyalityCardNumber" name="loyalityCardNumber" >
@foreach ($loyalityCardMaster as $id => $name)
<option value="{{$name}}">{{$id}}</option>
@endforeach
</select>
您可以根据需要使用下拉列表中的这个键值。
希望它可以帮助某人。
我试图在 Laravel 5.8 中做同样的事情,但在静态调用 pluck 时遇到错误。对于我的解决方案,我使用了以下内容。该集合显然被称为 todoStatuses。
<div class="row mb-2">
<label for="status" class="mr-2">Status:</label>
{{ Form::select('status',
$todoStatuses->pluck('status', 'id'),
null,
['placeholder' => 'Status']) }}
</div>
我想使用 illuminate\html 创建一个如下所示的 select 框:
<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
。
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 -- 查看弃用列表
只需将您的控制器更改为以下内容:
public function create()
{
$items = Subject::all(['id', 'name']);
return View::make('your view', compact('items));
}
你的观点是:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
<select class="form-control" name="item_id">
@foreach($items as $item)
<option value="{{$item->id}}">{{$item->name}}</option>
@endforeach
</select>
</div>
希望这能解决您的问题
Laravel 使用数组 Form::select
。所以我传递了如下数组:
$datas = Items::lists('name', 'id');
$items = array();
foreach ($datas as $data)
{
$items[$data->id] = $data->name;
}
return \View::make('your view', compact('items',$items));
在您看来:
<div class="form-group">
{!! Form::label('item', 'Item:') !!}
{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}
</div>
控制器
$campaignStatus = Campaign::lists('status', 'id');
compact('campaignStatus') 将导致 [id=>status]; //示例 [1 => 'pending']
return view('management.campaign.index', compact('campaignStatus'));
查看
{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}
对于Laravel 5:
$items = Items::lists('name', 'id');
将一个项目推到集合的开头。
$items->prepend($value, $key = null);
Laravel >= 5.3 方法 lists() 已弃用,使用 pluck()
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ['class' => 'some_css_class']) !!}
这将为您提供一个 select 框,其中 select 选项与 DB
中的 ID 号相同例如,如果您的数据库中有这个 table:
id name
1 item1
2 item2
3 item3
4 item4
在select框中会是这样
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
<option value="4">item4</option>
</select>
我发现 pluck 现在 returns 一个集合,你需要在 pluck 的末尾添加 ->toArray() ......所以像这样:pluck('name', 'id')->toArray();
Laravel 5.*
在您的控制器中:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
在您看来:
{{ Form::select('organization_id', $items, null, []) }}
Laravel 5.3 使用 pluck($value, $key )
$value 显示在您的下拉列表中,$key 是 id
控制器
$products = Product::pluck('name', 'id');
return view('main.index', compact('products'));
查看
{{ Form::select('id', $products, null, ['class' => 'form-control']) }}
试试这个。不使用控制器
{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
在你的控制器中,添加,
public function create()
{
$items = array(
'itemlist' => DB::table('itemtable')->get()
);
return view('prices.create', $items);
}
在您看来,使用
<select name="categories" id="categories" class="form-control">
@foreach($itemlist as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
在select框中,会是这样,
<select>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
我在pluck
toArray()
$items = Item::pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
已经说了很多,但请记住,有时您不想将数据库中的所有记录输出到您的 select 输入字段.....关键示例 I一直在这个学校管理网站上工作,我必须在 select 语句中输出所有布告栏类别。这是我在控制器中编写的代码
布告栏:: groupBy()->pluck('category')->get();
这样你会得到不同的记录,因为它们已经分组,所以没有重复的记录
抱歉回复晚了
显然lists
方法已经在Laravel中deprecated
,但是你可以使用pluck方法。
例如:
Laravel 5.7
public function create()
{
$countries = Country::pluck('country_name','id');
return View::make('test.new')->with('countries', $countries);
}
并且在视图中,如果您是 FORM
组件只是作为
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
if 将生成下拉列表
但我有一种情况表明 select 国家/地区作为第一个选项和空值
<option value="" selected="selected">--Select Country--</option>
所以我提到了
并修复了它,但以后如果我想更改它,我讨厌在视图中更改它
因此基于
创建了辅助函数并放置在国家/地区模型中
public static function toDropDown($tableName='',$nameField='',$idField='',$defaultNullText='--Select--')
{
if ($idField == null)
{
$idField="id";
}
$listFiledValues = DB::table($tableName)->select($idField,$nameField)->get();
$selectArray=[];
$selectArray[null] = $defaultNullText;
foreach ($listFiledValues as $listFiledValue)
{
$selectArray[$listFiledValue->$idField] = $listFiledValue->$nameField;
}
return $selectArray;
}
并在控制器中
public function create()
{
$countries = Country::toDropDown('countries','name','id','--Select Country--');
return View::make('test.new')->with('countries', $countries);
}
终于在视图中
{{ Form::select('testname',$countries,null,['class' => 'required form-control select2','id'=>'testname']) }}
结果符合预期,但我强烈建议使用pluck()
方法
要填充 laravel 中的下拉 select 框,我们必须按照以下步骤操作。
我们必须从控制器中获取这样的值:
public function addCustomerLoyaltyCardDetails(){
$loyalityCardMaster = DB::table('loyality_cards')->pluck('loyality_card_id', 'loyalityCardNumber');
return view('admin.AddCustomerLoyaltyCardScreen')->with('loyalityCardMaster',$loyalityCardMaster);
}
同样我们可以在视图中显示:
<select class="form-control" id="loyalityCardNumber" name="loyalityCardNumber" >
@foreach ($loyalityCardMaster as $id => $name)
<option value="{{$name}}">{{$id}}</option>
@endforeach
</select>
您可以根据需要使用下拉列表中的这个键值。 希望它可以帮助某人。
我试图在 Laravel 5.8 中做同样的事情,但在静态调用 pluck 时遇到错误。对于我的解决方案,我使用了以下内容。该集合显然被称为 todoStatuses。
<div class="row mb-2">
<label for="status" class="mr-2">Status:</label>
{{ Form::select('status',
$todoStatuses->pluck('status', 'id'),
null,
['placeholder' => 'Status']) }}
</div>