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
の代わりにエンティティのすべての情報を表示していることです。
Laravelはlists()関数を備えたクエリビルダーを提供します
あなたの場合、あなたのコードを置き換えることができます
$items = Items::all(['id', 'name']);
with
$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. -非推奨リストをご覧ください
Laravel> = 5.3メソッドlist()は非推奨ですpluck()
を使用してください
$items = Items::pluck('name', 'id');
{!! Form::select('items', $items, null, ) !!}
これにより、DBのID番号と同じ選択オプションを含む選択ボックスが表示されます
たとえば、DBテーブルにこれがある場合:
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',$items));
}
そしてあなたの見解:
<div class="form-group">
{!! Form::Label('item', 'Item:') !!}
<select class="form-control" name="item_id">
@foreach($items as $item)
<option value="{{$item->item_id}}">{{$item->id}}</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>
Laravel 5.3 use 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']) }}
pluck
の後にtoArray()
を追加しました
$items = Item::get()->pluck('name', 'id')->toArray();
{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
Laravel 5。*
コントローラーで:
$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));
あなたの見解では:
{{ Form::select('organization_id', $items, null, []) }}
返事が遅れて申し訳ありません
明らかにlists
メソッドはLaravelではdeprecated
でしたが、pluckメソッドを使用できます。
例えば:
ララヴェル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']) }}
ドロップダウンを生成する場合
しかし、私は国を最初のオプションとして選択し、null値として表示する状況があります
<option value="" selected="selected">--Select Country--</option>
だから私は言及しました
https://stackoverflow.com/a/51324218/8487424
これを修正しましたが、後でこれを変更したい場合は、ビューで変更するのが嫌です
https://stackoverflow.com/a/51324218/8487424
に基づいてヘルパー関数を作成し、国モデルに配置しました
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()
メソッドを使用することを強くお勧めします
For Laravel 5:
$items = Items::lists('name', 'id');
コレクションの先頭にアイテムをプッシュします。
$items->prepend($value, $key = null);
多くの人はすでに言われていますが、データベースからすべてのレコードを選択した入力フィールドに出力したくない場合があることに留意してください。 selectステートメントですべての掲示板のカテゴリを出力する必要があります。私のコントローラーからこれは私が書いたコードです
Noticeboard :: groupBy()-> pluck( 'category')-> get();
この方法では、グループ化されているため、レコードが重複しないため、個別のレコードを取得できます。
これを試してください。コントローラーを使用しない
{{ 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 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>
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>
ドロップダウンのこのキー値は、要件に応じて使用できます。それが誰かを助けることを願っています。