我试着用laravel 5建立一个友谊系统,结果我被困住了。我有一个friends_user表,如下所示:
这里是重点,我去了一个用户页面,我想看看我和这个用户的关系,4种解决方案:
我想要创建一个方法来检查一个用户是否是另一个朋友,很简单。我有一个“status”列,它是一个布尔值(0表示挂起,1表示朋友),对我来说最好的解决方案是能够在一种方法中检查以下情况:
所以如果你能告诉我我哪里错了,这是我的逻辑(只是为了检查用户是否是朋友):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会擦除其他的,不是吗?解决办法是什么?
我希望这是明确的,如果你能告诉我如何做到这一点,这将是很好的。
发布于 2015-04-23 07:00:50
这是个常见的错误。小心你的"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();
}
https://stackoverflow.com/questions/29824713
复制