Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 5 Laravel 5.5在模型中使用作用域会返回未定义方法的错误_Laravel 5_Scope_Undefined - Fatal编程技术网

Laravel 5 Laravel 5.5在模型中使用作用域会返回未定义方法的错误

Laravel 5 Laravel 5.5在模型中使用作用域会返回未定义方法的错误,laravel-5,scope,undefined,Laravel 5,Scope,Undefined,在这种情况下尝试使用范围时,返回以下错误: Call to undefined method Illuminate\Database\Query\Builder::isPromotionTypeIdScope() (View: C:\MAMP\htdocs\mysite\resources\views\site\home.blade.php) 逻辑是: 如果我将isPromotionTypeIdScope()替换为所有子句(来自范围),则可以工作,但如果我使用范围,则会给出错误,有什么建议吗

在这种情况下尝试使用范围时,返回以下错误:

Call to undefined method Illuminate\Database\Query\Builder::isPromotionTypeIdScope() (View: C:\MAMP\htdocs\mysite\resources\views\site\home.blade.php)
逻辑是:

如果我将isPromotionTypeIdScope()替换为所有子句(来自范围),则可以工作,但如果我使用范围,则会给出错误,有什么建议吗

该结构的某些部分不起作用。我在另一个模型中使用作用域,没有问题。找不到问题所在

是否可能,因为我正在尝试添加范围(例如:
->promotion()->isPromotionTypeIdScope($promotion\u type\u id)

公共功能产品()
{
返回$this->belongsTo('App\Models\Product','Product\u id');
}
公共职能推广(){
返回$this->belongtomany('App\Models\Promotion','Promotion\u product\u prices','product\u prices\u id','Promotion\u id');
}
公共功能单次升级($promotion\u type\u id=0){
返回$this->promotion()->isPromotionTypeIdScope($promotion\u type\u id)->first()??false;
}
公共功能类别\促销($促销\类型\ id=0){
返回$this->product()->first()
->类别()
->第一()
->晋升()
->iPromotionTypeIDScope($PromotionType\U id)
->一是假;
}
公共功能完全升级($promotion\u type\u id=0)
{
返回促销::where('full',1)->ispromotionTypedScope($Promotion\u type\u id)->first()??false;
}
公共函数hasPromotion($promotion\u type\u id=0){
如果($this->full\u promotion($promotion\u type\u id)!==false){
返回$this->full\u promotion($promotion\u type\u id);
}elseif($this->category\u promotion($promotion\u type\u id)!==false){
返回$this->category\u promotion($promotion\u type\u id);
}elseif($this->single\u promotion($promotion\u type\u id)!==false){
返回$this->single\u promotion($promotion\u type\u id);
}否则{
返回false;
}
}
公共函数作用域PromotionTypedScope($query、$promotion\u type\u id=0){
如果($promotion\u type\u id!=0){
返回$query->where('promotion\u type\u id',$promotion\u type\u id)
->其中('validity_from','=',date('Y-m-d H:i:s'))
->其中('active',1)
->订货人('updated_at','DESC')->限额(1);
}否则{
返回$query;
}
}

你在
促销
模型中调用你的
ispromotionTypedScope
方法的任何地方,因此你应该在
促销
模型中定义
范围ispromotionTypedScope
,而不是在这个模型中定义
ispromotionTypedScope

你在
促销
模型中调用你的
ispromotionTypedScope
方法的任何地方,所以你应该在
促销
模型中定义
范围PromotionTypedScope
,而不是此模型。

谢谢,它正以应有的方式工作。很明显,我把它放在了一个错误的模型中。谢谢你,它的工作方式正是它应该的。很明显,我把它放错型号了。
    public function product()
{
    return $this->belongsTo('App\Models\Product', 'product_id');
}

public function promotion(){
    return $this->belongsToMany('App\Models\Promotion', 'promotion_product_prices', 'product_price_id', 'promotion_id');
}



public function single_promotion($promotion_type_id = 0){ 

    return $this->promotion()->isPromotionTypeIdScope($promotion_type_id)->first() ?? false;

}

public function category_promotion($promotion_type_id = 0){
    return $this->product()->first()
                            ->category()
                            ->first()
                            ->promotion()
                            ->isPromotionTypeIdScope($promotion_type_id)
                            ->first() ?? false;

}


public function full_promotion($promotion_type_id = 0)
{
      return Promotion::where('full', 1)->isPromotionTypeIdScope($promotion_type_id)->first() ?? false;
}



public function hasPromotion($promotion_type_id = 0){
    if($this->full_promotion($promotion_type_id) !== false){
        return $this->full_promotion($promotion_type_id);
    }elseif($this->category_promotion($promotion_type_id) !== false){
        return $this->category_promotion($promotion_type_id);
    }elseif($this->single_promotion($promotion_type_id) !== false){
        return $this->single_promotion($promotion_type_id);
    }else{
        return false;
    }

}

public function scopeIsPromotionTypeIdScope($query, $promotion_type_id=0){

    if($promotion_type_id != 0){
        return $query->where('promotion_type_id', $promotion_type_id)
                                        ->where('validity_from', '<=', date('Y-m-d H:i:s'))
                                        ->where('validity_to', '>=', date('Y-m-d H:i:s'))
                                        ->where('active', 1)
                                        ->orderBy('updated_at', 'DESC')->limit(1);
    }else{
        return $query;
    }
}