我正在使用laravel来创建朋友列表。现在我想让所有朋友都使用USER表中的名字和头像以及其他东西。
我的架构:
`cid`, `uid_by`, `uid_to`, `status`
uid_by (the inviting user)
uid_to (to be friend user)
status (accepted or ignored)
每个友谊我只有一排。意思是它的双向友谊。
我试图提出一个问题:
$contacts = DB::table('contacts')
->leftJoin('users', 'contacts.uid_by', '=', 'users.uid')
->where('uid_by', $me)
->orWhere('uid_to', $me)
->where('contacts.status', 'accepted')
->get();
但它给了我一些错误的信息。喜欢而不是给我朋友的用户信息。它给了我自己的信息。我想要的只是获取朋友信息。
我应该重新设计数据库吗?或者我错过了什么?
更新
从技术上来说,如果uid_by是我的user_id,那么检查uid_to else,如果uid_by不是我的user_id,那么检查uid_by然后使用它们从users表的uid列获取数据。
所以我的uid可以在uid_by和我的朋友在uid_to上,反之亦然。
但我无法正确查询。
答案 0 :(得分:0)
请参阅Advanced wheres:
$contacts = DB::table('contacts')
->join('users', 'contacts.uid_by', '=', 'users.uid')
->where('users.uid','<>',$me)
->where('contacts.status', 'accepted')
->where(function($query)
{
$query-->where('uid_by', $me)
->orWhere('uid_to', $me)
})
->get();