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

时间:2015-04-08 07:17:38

标签: php laravel laravel-5 blade

我想使用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显示的是实体的所有信息。

15 个答案:

答案 0 :(得分:91)

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

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

答案 1 :(得分:22)

Laravel&gt; = 5.3方法列表()已弃用pluck()

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

{!! Form::select('items', $items, null, ) !!}

这将为您提供一个选择框,其中包含与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结束时添加 - &gt; toArray()...就像这样:pluck('name', 'id')->toArray();

答案 2 :(得分:19)

只需将您的控制器更改为以下内容:

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>

希望这能解决您的问题

答案 3 :(得分:7)

<强>控制器

 $campaignStatus = Campaign::lists('status', 'id');

compact('campaignStatus')将导致[id =&gt; status]; //示例[1 =&gt; '挂起']

return view('management.campaign.index', compact('campaignStatus'));

查看

{!! Form::select('status', $campaignStatus, array('class' => 'form-control')) !!}

答案 4 :(得分:6)

在您的控制器中,添加

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>

答案 5 :(得分:5)

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>

答案 6 :(得分:4)

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

答案 7 :(得分:3)

Laravel 5。*

在您的控制器中:

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

在您看来:

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

答案 8 :(得分:3)

我在$(document).on('click', '#tblBody tr', function () { var value = $(this).find('td:first').text(); alert(value); }); 之后添加了toArray()

pluck

答案 9 :(得分:3)

对不起,我晚答复

显然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']) }}

如果将生成下拉列表

但是我有一种情况表明选择国家作为第一个选项并且为空值

<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()方法

答案 10 :(得分:2)

对于Laravel 5:

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

将项目推到集合的开头。

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

答案 11 :(得分:1)

试试这个。不使用控制器

{{Form :: select(&#39; apartment_id&#39;,\ App \ Apartment :: all() - &gt; pluck(&#39; apartment_name&#39;,&#39; apartment_id&#39; ) - &gt; toArray(),null,[&#39; class&#39; =&gt;&#39; select2 form-control&#39;,&#39; multiple&#39; =&gt;&#39; multiple& #39;])}}

答案 12 :(得分:0)

已经说了很多,但请记住,有些时候您不想将数据库中的所有记录输出到您选择的输入字段中.....关键示例我一直在这所学校工作管理站点,我必须在select语句中输出所有公告板类别。在我的控制器中,这是我编写的代码

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

通过这种方式,您可以得到清晰的记录,因为它们已经进行了分组,因此不再重复记录

答案 13 :(得分:0)

要填充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>

您可以根据需要使用下拉菜单中的此键值。 希望它可以帮助某人。

答案 14 :(得分:0)

我试图在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>