【发布时间】:2019-10-22 17:17:22
【问题描述】:
我需要在 Eloquent 查询中获取与特定新闻具有相同(一个或多个)类别的所有新闻。而且我不知道数据透视表。
我有 3 张桌子:
新闻
id | title | content
NewsxCategory(数据透视表)
news_id | category_id
新闻类别
id | name
雄辩的模型
// NewsCategory model
class NewsCategory extends Model
{
}
// News Model
class News extends Model
{
public function categories()
{
return $this->belongsToMany(NewsCategory::class, 'news_x_category', 'news_id', 'category_id');
}
}
我试过了。
在助手中:
/**
* only related news
*
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function relatedNews(News $new)
{
$categories = $new->categories(); //obtain all categories of $new
return News::whereHas('categories', function ($query) use ($categories) {
$query->whereIn('new_id', $categories);
});
}
并且在视图中:
<div class="related-articles">
<h5>{{ __('RELATED ARTICLES') }}</h5>
<ul class="articles">
@foreach ( App\Helpers\News::relatedNews($newsItem) as $new)
<li>
<h6>{{ $new->title }}</h6>
<p>{{ $new->publication_date }}</p>
</li>
@endforeach
</ul>
</div>
但是助手总是返回null。
我也尝试过帮助:
return News::with('categories')->where('category_id',$categories )->get();
但此选项会返回所有新闻。
我需要所有相关的新闻,我的意思是具有相似类别的新闻。数据透视表让我头疼。
提前致谢!
【问题讨论】:
标签: laravel eloquent pivot-table relationship