2014-11-24 124 views
2

我很努力想知道爲什麼我的選擇列表返回錯誤。Laravel 4 - 使用雄辯的選擇列表中的未定義變量

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

您正在使用您已傳遞給Floor::whereIn 一個閉合功能所以這個閉合功能無法識別外部變量,如變量/對象($大樓)你想用它。 所以你必須告訴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> 

所以,現在的功能可以reconize這個變量:) 瞭解更多關於它:http://php.net/manual/en/functions.anonymous.php

+0

謝謝你你明智的答案。這就是現在完美的工作。 – Suba 2014-11-24 22:59:03

2

嘗試像這樣

.... 
    @foreach (Floor::whereIn('id', function($query) use ($building){ 
    ...