我试图生成一个简单的下拉列表(Laravel 5),其中每个选项的值是我的businesslocations表行的ID,显示的文本由多列数据(address_1, address_2, city)组成,取自每行。
In my controller
public function create()
{
$businesslocations = Businesslocation::where('businesslocations.business_id', '=', 'Auth::user()->business_id)->get();
return view('client.create')->with(['businesslocations' => $businesslocations]);
}
这里是我在create.blade.php中的位置
{!! Form::label('businesslocation_id', 'Business location:') !!}
@foreach($businesslocations as $key => $businesslocation)
{!! Form::select('businesslocation_id', $businesslocations, null, ['class' => 'form-control']) !!}
@endforeach
显示值为0:
<label for="businesslocation_id">Business location:</label>
<select class="form-control" id="businesslocation_id" name="businesslocation_id"><option value="0">{"id":"3","business_id":"7","address_1":" ","address_2":" ","city":" ","created_at":"2015-07-13 15:59:19","updated_at":"2015-07-13 15:59:19"}</option></select>
我正在寻找这样的值="id"和显示文本="address_1 address_2城市"为每个选项。不确定要用什么语法
<label for="businesslocation_id">Business location:</label>
<select class="form-control" id="businesslocation_id" name="businesslocation_id"><option value="1">Business location 1 - address_1 address_2 city</option><option value="2" selected="selected">Business location 2 - address_1 address_2 city</option></select>
查询生成器可以使用"lists"方法-所以如果您使用sql返回business_id为"id"和address1 + address2 + city为"name"
SELECT `businesslocation_id` as `id`,
CONCAT_WS(" ", `address1`, `address2`) AS `name` FROM `businesslocation`
然后返回一个列表——类似于:
$businesslocations = Businesslocation::where('businesslocations.business_id', '=', 'Auth::user()->business_id)
->get()
->lists('name','id');
(This is untested)
那么Eloquent将知道如何处理该名称,id并相应地显示它,如果你坚持:
{!! Form::select('businesslocation', $businesslocations, null, ['id'=> 'businesslocation','class' => 'form-control']) !!}
基本上如果你想用Laravel的方式做你需要传递name和id给select下拉列表。
也就是说,您还可以为您的businesslocation模型添加一个功能:
public function getFullAddressAttribute()
{
return $this->business->address1 . ' ' . $this->business->address2 . ' ' . $this->business->city;
}
然后
$businesslocations = Businesslocation::where('businesslocations.business_id', '=', 'Auth::user()->business_id)
->get()
->lists('fullAddress','id');
希望这能指引你走向正确的方向!需要注意的是,我还没有测试过上面的代码。
使用常规HTML生成选项,效果很好。
{!! Form::label('businesslocation_id', 'Business location:') !!}
<select class="form-control" id="businesslocation_id" name="businesslocation_id">
@foreach($businesslocations as $key => $businesslocation)
<option value="{{$businesslocation->id}}">{{$businesslocation->address_1}} {{$businesslocation->address_2}} {{$businesslocation->city}}</option>
@endforeach
</select>