2015-04-08 37 views
0

我需要Laravel 4.2laravel whereHas 「其中不工作」

模特們的幫助: // 1。模型kelengkapan

class Kelengkapan extends Eloquent{ 

    public function detilKelengkapan(){ 
     return $this->hasMany('DetilKelengkapan', 'id_kelengkapan'); 
    }  
} 

// 2.模型DetilKelengkapan

class DetilKelengkapan extends Eloquent{ 

    public function tDetilKelengkapanPaket(){ 
     return $this->hasMany('TDetilKelengkapanPaket', 'id_detil_kelengkapan'); 
    } 

    public function kelengkapan(){ 
     return $this->belongsTo('Kelengkapan', 'id_kelengkapan'); 
    } 


} 

// 3.模型TDetilKelengkapanPaket

class TDetilKelengkapanPaket extends Eloquent{ 

     public function detilKelengkapan(){ 
      return $this->belongsTo('DetilKelengkapan', 'id_detil_kelengkapan'); 
     } 

    } 

控制器是:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
          ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
           $q->where('id_paket', $paket); 
          })->get(); 

但結果具有不按「我」過濾d_paket「,但顯示所有數據。謝謝。 (新手)

回答

0

在那裏哪裏有函數你通過$id變量在關閉,但你在裏面使用$packet

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
          ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
           $q->where('id_paket', $id); 
           //---------------------^ 
          })->get(); 

試試吧,讓我知道結果。

1

代碼:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
         ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
          $q->where('id_paket', $paket); 
         })->get(); 

正確的代碼:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
         ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
          //the function should return the $q variable. 
          return $q->where('id_paket', $id); 
         })->get(); 

說明:

whereHas功能有2個必須的參數。關係函數名稱和閉包。閉合必須爲return a query對象,以便過濾器可以鏈接。

來源:http://laravel.com/docs/4.2/eloquent#querying-relations