如何根据查询范围中的关系过滤结果?

时间:2016-08-04 06:43:40

标签: eloquent laravel-5.2

我正在编写一个应用程序,其中有两个模型,即AngencyProfileAd。我已经创建了两种模型的多态关系。

ads table的结构如下:

Schema

我需要为AngencyProfile编写查询范围,以便根据条件检索代理机构资料,比方说where remaining_budget >= cpc

我怎样才能做到这一点?或者有可能吗?

我现在写的关系和查询范围如下:

public function ads() {
    return $this->morphMany(Ad::class, 'advertisable');
}
public function scopeAdvertisable($query)
{
    return $query->ads()->where('remaining_budget', '>=', 'cpc)->get();
}

这是一个例外。

  

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

我们将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

尝试更改以下功能

public function scopeAdvertisable($query)
{
    return $query->ads()->where('remaining_budget', '>=', 'cpc)->get();
}

public function scopeAdvertisable($query)
{
    return $query->with(['ads'=> function($query){
        $query->where('remaining_budget', '>=', 'cpc);
    }])
    ->get();
}

更新

public function scopeAdvertisable($query)
    {
        return $query->whereHas('ads',function($query){
            $query->where('remaining_budget', '>=', 'cpc);
        })
        ->get();
    }