2015-04-08 40 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