![](/img/trans.png)
[英]Laravel-4 how to populate select box from database with id value and name value
[英]Laravel-5 how to populate select box from database with id value and name value
我想創建一個像下面這樣的選擇框使用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
顯示的是實體的所有信息,而不是$item->name
。
Laravel 提供了一個帶有 list() 函數的查詢生成器
在您的情況下,您可以替換您的代碼
$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');
參考: https : //laravel.com/docs/5.2/upgrade#upgrade-5.2.0——查看棄用列表
Laravel >= 5.3 方法 lists() 已棄用 使用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();
只需將您的控制器更改為以下內容:
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>
希望這能解決你的問題
控制器
$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')) !!}
在您的控制器中,添加,
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>
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
...
</select>
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>
我已經加入toArray()
后, pluck
$items = Item::pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
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']) }}
Laravel 5.*
在您的控制器中:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
在您看來:
{{ Form::select('organization_id', $items, null, []) }}
這么晚才回復很抱歉
顯然,Laravel 中已deprecated
lists
方法,但您可以使用 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 會生成下拉菜單
但我有一種情況表明選擇國家作為第一個選項和空值
<option value="" selected="selected">--Select Country--</option>
所以我提到了
https://stackoverflow.com/a/51324218/8487424
並修復了這個問題,但以后如果我想改變它,我討厭在視圖中改變它
所以已經創建了基於https://stackoverflow.com/a/51324218/8487424
的輔助函數並放置在 Country Model
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 5:
$items = Items::lists('name', 'id');
將項目推送到集合的開頭。
$items->prepend($value, $key = null);
試試這個。 不使用控制器
{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
要在 laravel 中填充下拉選擇框,我們必須按照以下步驟操作。
從控制器我們必須得到這樣的值:
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>
您可以根據需要使用下拉列表中的此鍵值。 希望它可以幫助某人。
已經說了很多,但請記住,有時您不想將數據庫中的所有記錄輸出到您的選擇輸入字段中......關鍵示例我一直在這個學校管理網站上工作我必須在 select 語句中輸出所有布告欄類別。 從我的控制器這是我寫的代碼
公告板:: groupBy()->pluck('category')->get();
這樣你就可以得到不同的記錄,因為它們已經被分組,所以沒有重復的記錄
我試圖在 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.