我试图通过将每个朋友ID作为一个用逗号分隔的字符串存储在单个列中,以创建一个简单的“朋友”系统。
我想按ID获取用户并将其存储在数组中:
public function getFriends() {
$friendids = explode(',', $this->friends);
$friends = [];
foreach ($friendids as $id) {
$friends[] = User::findOrFail($id);
}
return $friends;
}
所以我可以这样做:
@foreach ($user->getFriends() as $friend)
<p>Friend ID: {{ $friend->id }}</p>
<p>Friend Username: {{ $friend->username }}</p>
@endforeach
但是我认为我无法在用户模型中使用findOrFail或我做错了什么?
我犯了两个简单的错误:
1)我在寻找错误时User
从物体上移开findOrFail()
了
2)我指定的用户ID(朋友)在数据库中不存在,从而导致错误
通过添加可选参数仅获得x个用户,我还对代码进行了一些改进:
// App/User.php
public function getFriends($friends_to_get = null) {
$friendids = explode(',', $this->friends);
$friends = [];
$i = 0;
foreach ($friendids as $id) {
if (is_numeric($id)) {
$friends[] = User::findOrFail($id);
}
if (isset($friends_to_get) && $i < $friends_to_get) {
++$i;
}
if (isset($friends_to_get) && $i == $friends_to_get) {
break;
}
}
return $friends;
}
现在,您可以在视图中执行以下操作:
@foreach ($user->getFriends() as $friend)
<p>Friend ID: {{ $friend->id }}</p>
<p>Friend Username: {{ $friend->username }}
@endforeach
或者,例如,如果您只想获得6个朋友,则可以执行以下操作: $user->getFriends(6)
就我而言,$ user是我当前正在查看谁的个人资料的用户。如果愿意,您也可以通过Auth::user()->getFriends()
/编辑:在foreach循环中添加了is_numeric检查。这样,您不必担心列中的第一个和最后一个元素会有多余的逗号。由于explode会为数组增加一个额外的值,因此,如果friends列的末尾有逗号。现在,您x,
每次可以只在列中添加或删除列,而不必担心获取不存在的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句