我尝试使用刀片来显示表格数据中的下拉列表。我遇到的问题是,我希望在连接的表中显示两个字段的结果,而不只是一个。
所以我想要一些东西来渲染类似的东西;
<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_type
和level
并将id
设置为值,所以我尝试了;
$agreements = Agreement::lists('agreement_type'.'level','id');
但这仅显示level
作为值,并完全忽略id
。
答案 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
(蛇案例)作为属性,所以不要对此感到困惑)