这是我的控制器的一部分;
$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”错误,我现在找不到一个合适的例子在网上找了一个多小时。
答案 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 做事,但它确实可行。