从表数组中选择下拉列表

时间:2015-01-16 15:37:01

标签: php laravel eloquent

这是我的控制器的一部分;

$agreements = Agreement::all();

print_r($agreements) //this works and displays an object/array with the details!

return View::make('individual_agreements.create') 
  ->with('individual', $individual)
  ->with('agreements', $agreements)
  ->with('content_title', 'Create new individual agreement');

这是我观点的一部分;

<div class="form-group">
  {{ Form::label('agreement_name', 'Agreement name') }}
  {{ Form::select('agreement_name', $agreements->agreement_name) }}
</div>

我在表格中有一个名为agreement_name的字段。我想做的就是尽可能以最有效的Laravel / Eloquent方式将其转换为下拉列表。

我一直收到标准的“agreement_name not defined”错误,我现在找不到一个合适的例子在网上找了一个多小时。

3 个答案:

答案 0 :(得分:1)

如果您需要在同一页上签署其他内容的协议,请尝试

<div class="form-group">
  {{ Form::label('agreement_name', 'Agreement name') }}
  {{ Form::select('agreement_name', $agreements->lists('agreement_name', 'agreement_name')) }}
</div>

这将获得协议集合中的所有协议名称,并允许在选择下拉列表中使用它们。第一个参数是列,第二个是键。

否则只需将您的查询更改为;

$agreements = Agreement::lists('agreement_name', 'id');

答案 1 :(得分:0)

你应该这样做

$agreements = Agreement::lists('agreement_name', 'id');

all会返回表格中的所有列,这就是您的代码无法正常工作的原因

答案 2 :(得分:0)

您进行此设置的方式允许使用foreach循环来列出并显示结果:

<select name="agreement_name" class="">
  <option value="">- Select -</option>
  @foreach($agreements AS $agreement)
  <option value="{{ $agreement->id }}">{{ $agreement->agreement_name }}</option>
  @endforeach
</select>

由于您的$agreements是一个元素数组,因此调用$agreements->agreement_name将无效,而$agreements[0]->agreement_name可能会有效。如果您想使用Form::select()选项,则需要使用其他方法来获取协议。检查该解决方案的其他答案。

希望这提供了一些见解!

修改

我应该注意,这不是 Laravel Way 做事,但它确实可行。