laravel在关系“哪里不工作”

i need help for Laravel 4.2

the models are: //1. model kelengkapan

class Kelengkapan extends Eloquent{

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

// 2. model 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. model TDetilKelengkapanPaket

class TDetilKelengkapanPaket extends Eloquent{

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

    }

the controller is:

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

but the result has not filtering by "id_paket" but showed all data. thanks. (newbie)

In there whereHas function you pass $id variable in the closure but you are using $packet inside.

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

Try it and let me know the result.

Your Code:

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

The correct Code:

$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();

Explanation:

whereHas function has 2 compulsory arguments. A relationship function name, and a closure. The closure must return a query object so that filters can be chained.

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