我可以将这两个查询简化为一个吗,我可以使用我的版本,但是我认为可以更简单地完成
public function removeFriend($userId)
{
$user = User::findOrFail($userId);
$user_id = $user->id;
$me = \Auth::user();
$me_id = $me->id;
//DB::table('friends')->where(['friend_id' => $me_id, 'user_id' => $user_id, 'accepted' => '1'])->delete();
//DB::table('friends')->where(['friend_id' => $user_id, 'user_id' => $me_id, 'accepted' => '1'])->delete();
//$first = DB::table('friends')->where(['friend_id' => $me_id, 'user_id' => $user_id, 'accepted' => '1']);
//DB::table('friends')->where(['friend_id' => $user_id, 'user_id' => $me_id, 'accepted' => '1'])->union($first)->delete();
return redirect()->back();
}
注释行是两个查询,下面是我研究过的一个查询,但认为有点类似,基本上我尝试使用orWhere()加入第二个查询,但是它也得到了其他所有朋友,如果我加入他们只有where()没有任何东西,所以很破灭
答案 0 :(得分:1)
根据您的问题,我假设您要实现“取消好友”功能。
让我们更新您的代码。
public function removeFriend($userId)
{
// This is not necessary. You are making one more query which is doing nothing basically. You are getting $userID which is same as $user->id
//$user = User::findOrFail($userId);
//$user_id = $user->id;
//DB::table('friends')->where(['friend_id' => $me_id, 'user_id' => $user_id, 'accepted' => '1'])->delete();
//DB::table('friends')->where(['friend_id' => $user_id, 'user_id' => $me_id, 'accepted' => '1'])->delete();
//$first = DB::table('friends')->where(['friend_id' => $me_id, 'user_id' => $user_id, 'accepted' => '1']);
//DB::table('friends')->where(['friend_id' => $user_id, 'user_id' => $me_id, 'accepted' => '1'])->union($first)->delete();
// Better Approach
try {
$result DB::table('friends')
->where(function($query) use($userID) {
$query->where('friend_id', $userID)->where('user_id', Auth::id());
})->orWhere(function($query) use($userID) {
$query->where('user_id', $userID)->where('friend_id', Auth::id());
})
->delete();
//Do whatever you want woth result
}
catch(/Exception $e) {
// Exception Handling;
}
return redirect()->back();
}
注意:未经测试。
答案 1 :(得分:1)
以这种方式构建查询意味着您的ID确实不同。在这种情况下,您可以将orWhere
用作高级查询来添加两个值,并获得2行可以循环和删除。但是由于它们不同,您将永远不会有2行合并成1行,并且能够像这样使用delete。当您开始加入事物时,它不会作为对象出现:
Friend::where('accepted', '=' 1)->where( function($query) use($me_id, $user_id) {
$query->where('friend_id', '=', $user_id)
->orWhere('friend_id', '=', $me_id);
})->get();