我需要Laravel 4.2 的帮助
模型为://1.科朗卡潘型号
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();
但结果没有经过id_paket过滤,而是显示了所有数据。谢谢(新手)
您的代码:
$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
是query
对象,这样过滤器才能被链接。
来源:http://laravel.com/docs/4.2/eloquent#querying-关系
在whereHas函数中,您在闭包中传递$id
变量,但在内部使用$packet
。
$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket')
->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){
$q->where('id_paket', $id);
//---------------------^
})->get();
试试看,让我知道结果。