我有user
和news
表,然后有一个名为news_user
的中间表,该中间表确定用户看到了哪些新闻。我可以轻松地获得已被看到的对象,但是现在我需要向用户展示未被看到的对象。
我做了一个变通方法,将所有可见的news
ID放入数组中,并寻找news
,其中id
与数组不同。但我不认为这是最健康的解决方案。
这就是我所做的:
$seenNewses = DB::table('news_user')->where('user_id', Auth::id())
->pluck('news_id')->toArray();
$notSeenNewses = News::whereNotIn('id', $seenKeepers)
->orderBy('id', 'asc')->first();
有没有一种方法可以通过单个查询做到这一点?
P.S:我看到了类似的问题,但是他们并没有感到困惑。任何答案表示赞赏。
答案 0 :(得分:0)
首先要在新闻模型中建立这样的关系
public function users()
{
return $this->belongsToMany(News::class,'news_user','news_id','user_id');
}
以下命令将为您提供所有用户尚未看到的所有新闻
$notSeenNewses = News::doesntHave('users')->get();
如果您想提出任何条件,请同时检查
$notSeenNewses = News::whereDoesntHave('users', function ($query) {
$query->where('YOUR CONDITION');
})->get();
未经测试,但是您可以根据需要进行修改。