laravel在关系“哪里不工作”

时间:2015-04-08 04:51:53

标签: php laravel

我需要帮助Laravel 4.2

模型是: // 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();

但结果未按“id_paket”过滤,但显示所有数据。谢谢。 (新手)

2 个答案:

答案 0 :(得分: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一个query对象,以便可以链接过滤器。

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

答案 1 :(得分:0)

在whereHas函数中,你在闭包中传递了$id变量,但你在里面使用$packet

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

尝试一下,让我知道结果。

相关问题