我很难理解为什么我的选择列表会返回错误。
我有一个嵌套的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>
答案 0 :(得分:2)
尝试这样
....
@foreach (Floor::whereIn('id', function($query) use ($building){
...
答案 1 :(得分:2)
您正在使用已传递给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