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;
}
}