简体   繁体   English

laravel关系中的“哪里不工作”

[英]laravel whereHas in relationships “where not working”

i need help for Laravel 4.2 我需要Laravel 4.2的帮助

the models are: //1. 这些模型是:// 1。 model kelengkapan 模型kelengkapan

class Kelengkapan extends Eloquent{

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

// 2. model DetilKelengkapan // 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. model TDetilKelengkapanPaket // 3.模型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. 但结果尚未按“ id_paket”进行过滤,但显示了所有数据。 thanks. 谢谢。 (newbie) (新手)

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. whereHas具有2个whereHas参数。 A relationship function name, and a closure. 关系函数名称和闭包。 The closure must return a query object so that filters can be chained. 闭包必须return query对象,以便可以链接过滤器。

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

In there whereHas function you pass $id variable in the closure but you are using $packet inside. 在其中的hasHas函数中,您在闭包中传递了$id变量,但是您在其中使用了$packet

$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. 试试看,让我知道结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM