从表数组中选择下拉列表


Select drop down from table array

这是我控制器的一部分;

$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的字段。我想做的只是以最有效的拉拉维尔/雄辩方式将其转换为下拉列表。

我一直收到标准的"agreement_name未定义"错误,并且我已经在网上寻找了一个多小时后,无法在网上任何地方找到合适的示例。

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

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

你应该这样做

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

all返回表中的所有列,所以这就是您的代码不起作用的原因

此设置的方式允许使用 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的做事方式,但它肯定是可行的。