【问题标题】:Populate dropdown in laravel with more than 2 attributes在 laravel 中填充超过 2 个属性的下拉列表
【发布时间】:2016-12-01 21:52:25
【问题描述】:

到目前为止,我知道如何使用 Eloquent(和 pluck)填充下拉列表

public function create()
{
    $items = Item::all()->pluck('name', 'id');
    return view('admin.item.create', compact('items'));
}

有了这个

{!! Form::select('item_id', $items, null, ['class' => 'form-control']) !!}

我可以生成这个

<select name="items" class="form-control">
    <option value="1">Item 1</option>
    <option value="2">Item 2</option>
    <option value="3">Item 3</option>
</select>

但现在我想创建这样的东西

<select name="items" class="form-control">
    <option value="1">Item 1 - Location</option>
    <option value="2">Item 2 - Location</option>
    <option value="3">Item 3 - Location</option>
</select>

我只能使用具有 2 个属性的 pluck。但现在我希望它显示 3 个属性。我怎么做?顺便说一句,我正在使用 Laravel 5.3。感谢您的帮助。

【问题讨论】:

  • 然后加入两个表,item和location并尝试
  • 你的 Item 字段是什么?
  • 正如@Komal 所说,连接两个表(位置和项目)并连接值然后返回查看。
  • 实际上这三个来自同一张桌子。我的 Items 表有 id、name 和 location 作为列
  • 那么不需要加入表格,只需要取名字,id和位置

标签: php laravel eloquent


【解决方案1】:

你有一个像[1=&gt; "something",2=&gt;"else"] 这样的数组。因此,您的任务是迭代数组并编辑值或从数据库中选择位置并使用 foreacharray_filter

所以类似于以下内容:

$items=[];
foreach(Item::all() as $item){
    $items[$item->id] = $item->name . " - " . $item->location->name; // build string to display here
}

编辑:

您的评论说位置在同一张桌子上,所以看起来像......

$items=[];
foreach(Item::all() as $item){
    $items[$item->id] = $item->name . " - " . $item->location; // build string to display here
}

【讨论】:

  • 有效!所以现在对于超过 2 个属性我不能使用 pluck(),但我必须使用 all() 来代替?非常感谢!
【解决方案2】:

采摘地点也

public function create()
{
  $items = Item::all()->pluck('name', 'id', 'location');
  return view('admin.item.create', compact('items'));
}

像这样生成

<select name="items" class="form-control">
  @foreach($items as $item)
    <option value="{{ $item->id }}">{{ $item->name }} - {{ $item->location }}</option>
  @endforeach                 
</select>

【讨论】:

  • 对不起,但它返回试图获取非对象错误的属性。此外,我认为 pluck 只能返回 2 种属性。即使我 dd 也不显示位置。但是感谢您的帮助
【解决方案3】:

创建数组列表的最佳方法是。

public function create(){
$items = Item::where('id','<>','')->lists('name', 'id');
return view('admin.item.create', compact('items'));}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2016-07-07
    • 2018-02-18
    • 1970-01-01
    • 2019-01-29
    • 2019-01-02
    • 2017-09-18
    相关资源
    最近更新 更多