【问题标题】:Laravel Call to undefined method Query\BuilderLaravel 调用未定义的方法 Query\Builder
【发布时间】:2018-12-21 22:14:26
【问题描述】:

我有属于 Shop Model 的产品模型。 商店可以是活跃的,也可以是活跃的,所以我只需要从活跃的商店获取产品。 所以我添加了这个方法

public function isActiveShop(){
    return $this->where($this->shop->status,'active');
}

从我的控制器

$prodcuts = Product::where('id',$rawArray)->isActiveShop()->get();

我得到了这个错误

"调用未定义的方法 Illuminate\Database\Query\Builder::isActiveShop()"

【问题讨论】:

    标签: laravel


    【解决方案1】:

    试试这个:

    $products = (new Product())->isActiveShop()->where('id',$rawArray)->get();
    

    【讨论】:

    • 这是工作,我认为范围更适合解决方案
    【解决方案2】:

    您必须使用scopewhereHas()

    public function scopeIsActiveShop($query) {
        return $query->whereHas('shop', function($query) {
            $query->where('status', 'active');
        });
    }
    

    【讨论】:

    • 这是我想的那样工作,但我遇到了一个新错误尝试获取非对象的属性
    • $this->shop->status 看起来有点奇怪。你的意思是->where('status', 'active')
    • shop 是一个关联方法 public function shop() { return $this->belongsTo(Shop::class); }
    • 谢谢,效果很好。任何研究该部分的参考!
    猜你喜欢
    • 2018-10-03
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2017-10-04
    • 2018-05-17
    • 2015-12-17
    • 2018-12-10
    相关资源
    最近更新 更多