如何在本地范围内按条件 select 文章?

How to select articles by condition in local scope?

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

文章

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

我需要获取国家/地区为 "USA" 的文章,为此我这样做:

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

它returns我与相关国家的所有文章。

如何为 with("country") 分配局部作用域以设置附加条件?

我试过了:

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

但我不知道如何在 with

中调用它

你做错了。你不需要在这里使用本地范围,你不需要在这里使用 with() 并且你没有正确定义关系。

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

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();