如何在当地范围内按条件选择文章?

时间:2017-03-12 13:29:14

标签: laravel laravel-5.4

我有Article模型和Country模型,其中包含指定的关系:

文章

public function country(){
    return $this-has_one("Country);
}

我需要获得国家为“美国”的文章,为此我做了:

Articles:with("country")->get();

它返回了我与相关国家的所有文章。

如何为with("country")指定设置附加条件的本地范围?

我试过了:

 public function scopeLocation($query)
    {
        $country_name = Location::get());
        if(!empty($country_name)){
             return $query->where('name', '=', $country_name);
       }
    }

但我不知道如何在with

中调用它

1 个答案:

答案 0 :(得分:1)

你做错了。您不需要在此使用本地范围,您不需要在此使用with(),也没有正确定义关系。

首先,将country_id字段添加到articles表并定义关系:

public function country()
{
    return $this->belongsTo('App\Country');
}

然后使用简单查询按国家/地区ID获取所有文章:

$articles = Article::where('country_id', $countryId)->get();

如果您不知道国家/地区ID,但知道国家/地区名称,请使用whereHas()

$articles = Article::whereHas('country', function($q) use($countryName) {
    $q->where('name', $countryName);
})->get();