Laravel 4 - 使用Eloquent选择列表中的未定义变量

时间:2014-11-24 22:28:27

标签: php laravel laravel-4 eloquent

我很难理解为什么我的选择列表会返回错误。

我有一个嵌套的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>

2 个答案:

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