【发布时间】:2019-04-12 20:22:45
【问题描述】:
我有两张桌子:-
A. users table
|--------------------------------------------------------|
| id | fname | lname | deleted |
|--------------------------------------------------------|
| 1 | Jax | Briggs | n |
|--------------------------------------------------------|
| 2 | Juli | Briggs | y |
|--------------------------------------------------------|
| 1 | Nacy | Blew | n |
|--------------------------------------------------------|
B. friend table
|-------------------------------------------------------------|
| id | user_id | receiver_id | status |
|-------------------------------------------------------------|
| 1 | 2 | 3 | 0 |
|-------------------------------------------------------------|
| 2 | 1 | 3 | 1 |
|-------------------------------------------------------------|
| 1 | 2 | 1 | 1 |
|-------------------------------------------------------------|
我正在尝试使用以下查询检索用户的朋友:-
"SELECT users.id, users.fname, users.lname FROM users,friend
WHERE
IF(friend.user_id != $id, friend.user_id = users.id, friend.receiver_id = users.id)
AND (friend.user_id = $id OR friend.receiver_id = $id)
AND (friend.status = 1)
AND (user.deleted = 'n')"
如果friend.status = 1,这意味着接收者已经接受了好友请求。 如果user.deleted = n,则表示用户帐号没有被删除
如何将上述查询转换为 Laravel Eloquent?
我试图做这样的事情:-
$friendshipQuery = Friend::select('users.id', 'users.fname', 'users.lname', 'users.email')
->whereRaw('IF(friend.user_id != ' .$id. ', friend.user_id = users.id, friend.receiver_id = users.id)')
->where(array('friend.status' => Globals::FR_ACCEPTED)) // status which are accepted
->where(function($query) use ($id){
$query->where(array(
'friend.user_id' => $id // check whether user id matches sender id
))
->orWhere(array(
'friend.receiver_id' => $id // check whether user id matches receiver id
));
})
->where('users.deleted', 'n');
不知何故,我无法加入这两个表,因为friend.user_id 和friend.receiver_id 都引用了users.id。
我怎样才能做到这一点?
还有其他有效的方法吗?
【问题讨论】:
标签: laravel join laravel-5.6