我有三张桌子:
sites_id
作为外键)listing_id
作为外键)如何在站点模型中定义关系以获取与特定站点相关的所有“新闻”。我已尝试以下操作,但它不起作用并返回 0 计数。
$news = $site->news()->count();
public function news()
{
return $this->hasManyThrough(
News::class,
Listing::class,
'id',
'id',
'listing_id',
null,
);
}
要在 Site 模型中定义一个关系以通过列表获取所有相关新闻,您需要正确设置 hasManyThrough 关系。 hasManyThrough 关系用于定义“has-many-through”关系,其中一个模型通过中间模型与另一个模型相关。
以下是站点模型中 hasManyThrough 关系的正确设置:
站点模型:定义 hasManyThrough 关系以通过列表获取新闻。
public function news()
{
return $this->hasManyThrough(
News::class, // The final model we want to access
Listing::class, // The intermediate model
'site_id', // Foreign key on the Listing model
'listing_id', // Foreign key on the News model
'id', // Local key on the Site model
'id' // Local key on the Listing model
);
}
列表模型:确保将 site_id 列设置为外键。
public function site()
{
return $this->belongsTo(Site::class);
}
新闻模型:确保listing_id列设置为外键。
public function listing()
{
return $this->belongsTo(Listing::class);
}
获取新闻计数,现在您可以获取与特定站点相关的新闻计数,如下所示:
$site = Site::find($siteId);
$newsCount = $site->news()->count();
以下是 hasManyThrough 方法中使用的参数的详细细分:
确保 hasManyThrough 方法中的外键和主键与您的实际数据库架构匹配。
通过此设置,$site->news()->count() 应正确返回与特定站点相关的新闻项的计数。