Laravel / Blade下拉列表 - 适用于多个领域

时间:2015-01-06 11:35:21

标签: php laravel blade

我尝试使用刀片来显示表格数据中的下拉列表。我遇到的问题是,我希望在连接的表中显示两个字段的结果,而不只是一个。

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

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

我的刀片视图目前看起来像这样;

<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

1 个答案:

答案 0 :(得分:3)

这是最简单的方法。只需使用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(蛇案例)作为属性,所以不要对此感到困惑)