LaraBase // Code Sexily 自带福利的技术社区

帖子

关于好友列表展示的问题


作者 回帖
雅痞
我的好友关系需求是无序好友,既只要是好友,就是互相都是,没有单方关注等概念。
基于减少冗余的原则,我的好友关系表设计如下

id uid1 uid2 created_at updated_at
但在写代码时发现好像比较麻烦,现在这种精简的结构里,当前用户可能出现在uid1也可能出现在uid2,是分别以这两个字段为基准各筛选一遍,然后把结果集拼接在一起么?

上网搜了一下,没有找到合适的答案,于是我用最笨拙的办法实现了一下。

public function friend()
{
$userid = Auth::user()->id;

$friends2 = Friendship_relation::where('uid2','=',$userid)->get();
$friends1 = Friendship_relation::where('uid1','=',$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]"
已发布 11月前 | 最近更新 11月前 #1 - 查看详细
雅痞
我已经被砖砸到了……
当时运行了一下发现出数据就以为蒙对了,但仔细一看,在模板中展示数据时出问题了。
' $users[$friend->uid2]->name'

这行代码并没有按我希望的,展示出users表里id是$friend->uid2所代表值的姓名,而是以$friend->uid2值为数组下标的姓名了。又尝试了几下,发现不知道怎么在这里靠id做用户表姓名的关联查询了……

或者这个也应该在控制器里做好么?
已发布 11月前 #2 - 查看详细
Woody
没怎么看懂的你的问题,不过这种 ' $users[$friend->uid2]->name' 写法并不是十分的面向对象,可能是你模型关系没处理好,请描述一下你的模型关系;
另外可以看看SOLID原则,写代码的时候就不会出现那种很难管理的代码了
已发布 11月前 #3 - 查看详细