Laravel/Blade 下拉列表 - 用于多个字段

Laravel/Blade Drop Down List - For more than one field

我正在尝试使用 blade 显示来自 table 数据的下拉列表。我遇到的问题是,我想在 table 中显示 两个 字段的结果,而不仅仅是一个。

所以我想要渲染类似的东西;

<select id="agreement_type" name="agreement_type">
  <option value="1">Agreement Field 1 - Agreement Field 2</option>
  <option value="2">Agreement Field 1 - Agreement Field 2</option>
  <option value="4">Agreement Field 1 - Agreement Field 2</option>
</select>

我的控制器目前看起来像这样;

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

return View::make('client_agreements.create')
        ->with('agreements', $agreements);

我的 blade 视图当前如下所示;

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

我尝试以各种方式修改视图和控制器以获得所需的输出。但是无法让它工作。

我想显示 agreement_typelevel 并将 id 设置为值,所以我尝试了;

$agreements = Agreement::lists('agreement_type'.'level','id');

但这只是将 level 显示为值并完全忽略 id

这是最简单的方法。只需使用 foreach 循环来构建选项数组:

$agreements = Agreement::all();
$agreementOptions = array();
foreach($agreements as $agreement){
    $agreementOptions[$agreement->id] = $agreement->agreement_type.' '.$agreement->level;
}
return View::make('client_agreements.create')
           ->with('agreements', $agreementOptions);

不过,您也可以在模型中定义 attribute accessor。您可以使用它来创建可以正常访问的新属性,但是您可以 运行 逻辑来生成它们(比如组合到属性)

public function getSelectOptionAttribute(){
    return $this->attributes['agreement_type'].' '.$this->attributes['level'];
}

然后你可以使用lists:

$agreements = Agreement::all()->lists('select_option', 'id');

(Laravel 将方法名称的 SelectOption(标准大小写)转换为属性的 select_option(蛇形大小写),所以不要对此感到困惑)