我正试图在laravel 5中建立一个友谊系统而且我被困住了.
我有一个friends_user表,如下所示:
我有一个friends_user表,如下所示:
> id
> user_id
> friend_id
>状态
这是重点,我转到用户页面,我想知道我与这个用户的关系,4个解决方案:
>我们是朋友
>我们不是
>他还没有接受这个请求
>我必须确认与否.
我想创建一个方法来检查用户是否是另一个用户的朋友,简单.
我有一个’status’列,它是一个布尔值(0表示挂起,1表示朋友)
对我来说完美的解决方案是能够用一种方法检查是否:
>用户是朋友,所以要么(‘user_id’,Auth :: user() – > id) – >和(‘friend_id’,$friend-> id)或反向(‘user_id’,$friend – > id) – >和(‘friend_id’,Auth :: user() – > id),它必须检查2种感官
>我发出请求,必须等待他的回答
>我收到了请求,必须接受.
>我们不是朋友,所以,我可以加他.
所以如果你能告诉我这里我错在哪里,这是我的逻辑(仅用于检查用户是否是朋友):User.PHP
public function isFriend($slug) { // Get both user $user = Auth::user(); $receiver = User::where('slug',$slug)->first(); // get list of friends (so who have status = 1) $result = Friends::where('status',1); // Get users where user id is equal to connected $result = $result->where('user_id',$user->id)->where('friend_id',$receiver->id); $result = $result->orWhere('user_id',$receiver->id)->where('friend_id',$user->id); $result = $result->get(); if(count($result) == 0) return false; return true; }
在我看来,我做了这些检查.
这很有效,但是只有当我(当前用户)发送了请求但是如果它是反向的,即使状态为0,它也会返回给我用户.我认为我的$result擦掉了其他的不是吗?解决方案是什么?
我希望它很清楚,如果你能以干净的方式告诉我这是怎么做的,那就太好了.
这是一个常见的错误.小心你的“orWhere”条款.
public function isFriend($slug) { // Get both user $user = Auth::user(); $receiver = User::where('slug',$slug)->first(); // get list of friends (so who have status = 1) $result = Friends::where('status',1)->where(function($query) use ($receiver,$user) { $query->where([ 'user_id' => $user->id,'friend_id' => $receiver_id ])->orWhere([ 'user_id' => $receiver->id,'friend_id' => $user->id ]); })->get(); return ! $result->isEmpty(); }