Select 从 table 数组中下拉

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>

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

我不断收到标准 "agreement_name not defined" 错误,我在网上找了一个多小时后找不到 suitable 示例。

你应该这样做

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

all return table 中的所有列,所以这就是您的代码无法工作的原因

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

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

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

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

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

您进行此设置的方式允许使用 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做事的方式,但它确实可行。