我正在努力理解为什么我的选择列表返回错误。
我有一个嵌套的 foreach 循环,第二个循环应该按building_id显示记录。 然而,正是这个id,它返回了一个未定义的变量($building->id)
是查询的构造有问题吗?
<select>
@foreach (Building::orderBy('title')->get() as $building)
<optgroup label="{{ $building->title }}"></optgroup>
@foreach (Floor::whereIn('id', function($query){
$query->select('floor_id')
->from('rooms')
->where('building_id', $building->id)->distinct();
})->get() as $floor)
<option value="{{ $floor->id }}">{{ $floor->description }}</option>
@endforeach
@endforeach
</select>
您正在使用已传递给Floor::whereIn
的闭包函数因此,此闭包函数无法识别外部变量,例如您要在其中使用的变量/对象($building)。所以你必须告诉 PHP 在这个闭包/匿名函数中使用此$bulding变量:
<select>
@foreach (Building::orderBy('title')->get() as $building)
<optgroup label="{{ $building->title }}"></optgroup>
@foreach (Floor::whereIn('id', function($query) use ($building){
$query->select('floor_id')
->from('rooms')
->where('building_id', $building->id)->distinct();
})->get() as $floor)
<option value="{{ $floor->id }}">{{ $floor->description }}</option>
@endforeach
@endforeach
</select>
所以现在函数可以识别这个变量:)阅读更多关于它的信息 : http://php.net/manual/en/functions.anonymous.php
像这样试试
....
@foreach (Floor::whereIn('id', function($query) use ($building){
...