我有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
答案 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();