【发布时间】:2015-07-01 17:07:24
【问题描述】:
我正在尝试在 laravel 5 中建立一个友谊系统,但我被卡住了。 我有一个friends_user 表,如下所示:
- 身份证
- user_id
- friend_id
- 状态
重点是,我转到一个用户页面,我想看看我与这个用户的关系如何,4 个解决方案:
- 我们是朋友
- 我们不是
- 他还没有接受请求
- 我必须确认与否。
我想创建一个简单的方法来检查用户是否与其他人成为朋友。 我有一个“状态”列,它是一个布尔值(0 表示待处理,1 表示朋友) 对我来说完美的解决方案是能够以一种方法检查是否:
- 用户是朋友,所以要么 ('user_id', Auth::user()->id)->and ('friend_id', $friend->id) 要么相反的 ('user_id', $friend- >id)->and ('friend_id', Auth::user()->id),它必须检查两种感觉
- 我发送了请求,必须等待他的答复
- 我收到了请求,必须接受。
- 我们不是朋友,所以我可以加他。
所以如果你能告诉我我错在哪里,这是我的逻辑(只是为了检查用户是否是朋友):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 删除了其他的不是吗?那么有什么办法呢?
我希望它很清楚,如果你能以一种干净的方式告诉我如何做到这一点,那就太好了。
【问题讨论】:
-
看看这个系列..laracasts.com/series/build-a-laravel-app-from-scratch里面有一个关于朋友的课程
-
你有点搞砸了,为什么你有一个 Friends 表?朋友不是用户?如果是这样,为什么您在用户表上没有多对多自我关系?
-
@bretterer 您需要订阅才能访问该视频。 (但如果你想了解laravel和php,这是一个非常好的投资9美元的方式)
-
不,没有 Friends 表,只有一个 friends_user 来存储每个好友条目。我做了多对多,我可以获取我添加的用户,添加我的用户,但我无法获得与特定朋友的友谊状态,我无法将参数传递给我的方法。获取我添加的所有朋友的方法是: public function friendsOfMine() { return $this->belongsToMany('App\User', 'friends_user', 'user_id', 'friend_id') ->wherePivot('status', '=', 1) ->withPivot('status'); }
标签: php mysql laravel laravel-5