[抛砖] 关于获取用户列表的实现方法
我的好友关系需求是无序好友,既只要是好友,就是互相都是,没有单方关注等概念。
基于减少冗余的原则,我的好友关系表设计如下
id | uid1 | uid2 | created_at | updated_at |
但在写代码时发现好像比较麻烦,现在这种精简的结构里,当前用户可能出现在uid1也可能出现在uid2,是分别以这两个字段为基准各筛选一遍,然后把结果集拼接在一起么?
上网搜了一下,没有找到合适的答案,于是我用最笨拙的办法实现了一下。
public function friend()
{
$userid = Auth::user()->id;
$friends1 = Friendship_relation::where('uid1','=',$userid)->get();
$friends2 = Friendship_relation::where('uid2','=',$userid)->get();
$users = User::all();
return view('friend.friend',[
'friends1' => $friends1,
'friends2' => $friends2,
'users' => $users,
]);
}
然后在模板里是这么写的
@foreach($friends1 as $friend)
<tr>
<td>{{$users[$friend->uid2]->name}}</td>
<td>{{$users[$friend->uid2]->email}}</td>
<td>{{$users[$friend->uid2]->created_at}}</td>
</tr>
@endforeach
@foreach($friends2 as $friend)
<tr>
<td>{{$users[$friend->uid1]->name}}</td>
<td>{{$users[$friend->uid1]->email}}</td>
<td>{{$users[$friend->uid1]->created_at}}</td>
</tr>
@endforeach
笨拙吧!我都觉得笨拙的可怕。。。
我本来是想在控制器里就把$friends1和$friends2两个结果集合并起来,但是我尝试了几种方法*都未果。
我的PHP基础是比较薄弱。
不知道有没有朋友能告诉我更科学的写法~~希望大家轻喷重教~~多谢。
我尝试的几种方法:
- 当成数组合并(array_merge($friends1,$friends2);)报错,显然他们不是数组;
- 用加号报错不是整形;
- 用点合并,结果看起来像个数组的样式,但已经是文本格式了:string(6) "[3][1]"
推荐文章: