-1

基本上我有属于许多用户的用户。我们可以想象用户之间的友谊关系。

所以我有一个关系的数据透视表,有 2 个用户的 id 和一个附加字段“created_at”。


用户表:id、name

朋友用户表:user_id、friend_id、created_at


在我的用户模型中,我有一个返回用户集合的好友函数:

public function friends() {
    return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
}

我的目标是获取用户之间所有关系的列表。使用 User::all() 上的循环,我可以轻松地获得所有这些关系,一个又一个用户:

$users = User::all();
foreach ( $users as $user ) {
   foreach ( $user->friends as $friend ) {
       return [$user->name . 'is friend with ' . $friend->name];
   }
}

但我想让它们按“created_at”排序,而不是关系中的用户。

有没有一种简单的方法可以通过 eloquent 或其他方式来做到这一点?

谢谢你的帮助。

4

3 回答 3

0

可能这有助于您首先将您的功能更改为

    public function friends() {
    return $this->belongsToMany(Friend::class);
}

然后在控制器中执行此操作

$users = User::with('friends')->get();
foreach ( $users as $user ) {
   
       return [$user->name . 'is friend with ' . $user->firends->name];
     }

使用 dd($users) 检查您是否找到朋友关系。

于 2022-01-07T08:41:15.390 回答
0

您可以使用带有别名的数据透视表字段pivot

$user = User::with(['friends' => function($friendQuery) {
    $friendQuery->orderBy('pivot.created_at', 'desc');
}])->get();
于 2022-01-07T08:35:27.477 回答
0

您可以尝试使用 User::orderBy('created_at')->get(); 或如果您提到关系,您可以在关系中做同样的事情

public function friends() {
return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id')->orderBy('created_at');}
于 2022-01-07T08:36:43.210 回答