web-dev-qa-db-ja.com

Laravel-5データベースから選択ボックスにid値とname値を入力する方法

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の代わりにエンティティのすべての情報を表示していることです。

48
borracciaBlu

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. -非推奨リストをご覧ください

95
mininoz

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();

23
lewis4u

コントローラーを次のように変更するだけです。

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>

これがあなたの問題を解決することを願っています

20
Sohel0415

コントローラー

 $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')) !!}
7
Hashmat Waziri

コントローラーで、追加、

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>
6

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>
5
Naing Win

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']) }}
4
Gaetano

pluckの後にtoArray()を追加しました

$items = Item::get()->pluck('name', 'id')->toArray();

{{ Form::select('item_id', [null=>'Please Select'] + $items) }}
3
Gediminas

Laravel 5。*

コントローラーで:

$items= Items::pluck('name', 'id')->toArray();
return view('your view', compact('items', $items));

あなたの見解では:

{{ Form::select('organization_id', $items, null, []) }}
3
Dominic Tan

返事が遅れて申し訳ありません

明らかに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()メソッドを使用することを強くお勧めします

3
Manojkiran.A

For Laravel 5:

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

コレクションの先頭にアイテムをプッシュします。

$items->prepend($value, $key = null);
2
3ehrang

多くの人はすでに言われていますが、データベースからすべてのレコードを選択した入力フィールドに出力したくない場合があることに留意してください。 selectステートメントですべての掲示板のカテゴリを出力する必要があります。私のコントローラーからこれは私が書いたコードです

Noticeboard :: groupBy()-> pluck( 'category')-> get();

この方法では、グループ化されているため、レコードが重複しないため、個別のレコードを取得できます。

0
Dawood Iddris

これを試してください。コントローラーを使用しない

{{ Form::select('apartment_id', \App\Apartment::all()->pluck('apartment_name', 'apartment_id')->toArray(), null,['class'=>'select2 form-control', 'multiple'=>'multiple','required','id' => 'apartment_id']) }}
0
Vinayak

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>
0
PhPGuy

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>

ドロップダウンのこのキー値は、要件に応じて使用できます。それが誰かを助けることを願っています。

0