关系中的拉拉威尔;其中不工作”;


laravel whereHas in relationships "where not working"

我需要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个强制参数。一个关系函数名和一个闭包。闭包必须returnquery对象,这样过滤器才能被链接。

来源: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();

试试看,让我知道结果。