我有一个水果数据库,让我说我想要它的所有红色水果:
$allfruit = DB::table('fruits')->Where("color","=","red")->paginate(10);
我还有一张用户最不喜欢的水果表。如果用户已登录,我正试图通过他们的ID获取所有他们讨厌的水果的列表:
$leastfav = DB::table('dislikes')->Where("userID","=",Auth::user()->id)->get();
现在我要做的就是删除“不喜欢”表格中显示的$allfruit
中包含该用户ID的所有条目。
我尝试过的是:
$allfruit = DB::table('fruits')->Where("color","=","red")->merge($leastfav)->where(fruits.ID,"!=", "dislikes.fruitID")->paginate(10);
如果有帮助,我的数据库是SQLite。感谢
答案 0 :(得分:1)
您可以使用whereNotExists
(whereExists()的倒数):
$allfruitQuery = DB::table('fruits')->where('color', 'red');
if (auth()->check()) {
$allfruitQuery->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('dislikes')
->where('userID', auth()->id())
->whereRaw('fruits.ID = dislikes.fruitID');
});
}
$allfuit = $allfruitQuery->paginate(10);
或者,(如果您使用的是5.2+),您可以使用when()
:
$allfuit = DB::table('fruits')->where('color', 'red')
->when(auth()->check(), function ($query) {
$query->whereNotExists(function ($query) {
$query->select(DB::raw(1))
->from('dislikes')
->where('userID', auth()->id())
->whereRaw('fruits.ID = dislikes.fruitID');
});
})
->paginate(10);
希望这有帮助!