使用对象中的值创建一个窗体选择框


Laravel-4 Blade: making a form select box using values in an object

我想为一个表单创建一个城市名称选择框。我已经能够创建并传递给我的视图对象$city,其值我可以正确地列出我的视图,如果我只是在表单外显示它们。$city需要用于选择框的两个属性是:$city->id和$city->name。

我尝试使用Blade执行此操作失败。问题归结为:我如何嵌套@foreach在刀片表单::select语句?例如,不使用@foreach,只需输入几个城市,就可以完美地工作,包括选择空白,以及默认的Albuquerque:

{{ Form::open() }}
{{ Form::Label('city_bldg_id','City:') }}
{{ Form::select('city_bldg_id', array(
    '',
    '2'=>'Albuquerque',
    '11'=>'Bernalillo'
    ),'2') }}
{{ Form::close() }}

为了用$city中的所有值填充选择框,似乎需要在Form::select数组中使用@foreach。这可能吗?如果有,怎么做?我所有的尝试都会产生语法错误。或者,$city必须是数组而不是对象吗?

我很接近,我可以品尝它,但我不知道最后一步。对于适当代码的任何建议都将非常感激。谢谢!

我通常更喜欢在进入视图之前创建select数据。用

这样更容易读懂
{{ Form::select('city_bldg_id', $cities, '2' }}

(旁注:不确定是否需要将2括在引号中。可能不会。)

这样,你就可以通过foreaches来创建数组,而且你可以在纯PHP中完成,而不是在Blade中。

如果您从Eloquent模型(例如City)中获取数据,创建数组的一种简单方法是lists()方法:

$cities = City::lists('name', 'id');

如果您需要过滤出特定的城市,您只需按正常方式执行:

$cities = City::where('somefield', '=', 'value')-> etc... ->lists('name', 'id');
我希望我没有对你已经知道的事情做过多的假设。如果这看起来太幼稚,对你没有帮助,我道歉。