Php 表单选择选项,无法正确获取值和显示文本

Php 表单选择选项,无法正确获取值和显示文本,php,html,laravel-5,Php,Html,Laravel 5,我试图生成一个简单的下拉列表Laravel 5,其中每个选项的值都是我的businesslocations表行的ID,显示的文本由多个列组成,数据地址1、地址2、城市取自每行 在我的控制器中 public function create() { $businesslocations = Businesslocation::where('businesslocations.business_id', '=', \Auth::user()->business_id)-&g

我试图生成一个简单的下拉列表Laravel 5,其中每个选项的值都是我的businesslocations表行的ID,显示的文本由多个列组成,数据地址1、地址2、城市取自每行

在我的控制器中

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">{&quot;id&quot;:&quot;3&quot;,&quot;business_id&quot;:&quot;7&quot;,&quot;address_1&quot;:&quot; &quot;,&quot;address_2&quot;:&quot; &quot;,&quot;city&quot;:&quot; &quot;,&quot;created_at&quot;:&quot;2015-07-13 15:59:19&quot;,&quot;updated_at&quot;:&quot;2015-07-13 15:59:19&quot;}</option></select>
我正在为每个选项寻找类似于value=id和display text=address\u 1 address\u 2 city的内容。不确定到达那里的语法

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

使用常规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>

查询生成器可以使用lists方法—因此,如果使用返回business_id作为id,address1+address2+city作为名称的sql

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的方式来做,你需要把名字和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'); 
希望这能引导你朝着正确的方向前进!请注意,我还没有测试上面的代码