【发布时间】:2020-09-03 02:55:18
【问题描述】:
我想知道以下用例以及在 Laravel 中实现这一目标的最简单、最优雅的方法。
基本上我会有一个用户表
id, name, email, password
我还将创建一个 SuggestedUser 模型,以便向用户推荐用户想要关注的用户,并说明他们应该关注该用户的原因。
id user_id, suggested_id, reason
在我的用户类中,将这两者关联起来很简单
public function suggestedUsers()
{
return $this->hasMany(SuggestedUser::class);
}
所以现在我可以做到了
$user->suggestedUsers 并获取数据透视表的结果
=> Illuminate\Database\Eloquent\Collection {#1881
all: [
App\Models\PartnerSuggestion {#1939
id: 1,
user_id: 1,
partner_id: 86,
reason: "You liked similar posts",
created_at: null,
updated_at: null,
},
],
}
但我真正想做的是从这里返回User::class 的集合,而不是枢轴的集合。
这样当我执行 $user->suggestedUsers 时,我会得到这样的东西,包括原因
Illuminate\Database\Eloquent\Collection {#1940
all: [
App\Models\User {#1941
id: 86,
first_name: "Eugene",
last_name: "Simonis",
reason: "You liked similar posts"
},
App\Models\User {#1942
id: 95,
first_name: "Wilfred",
last_name: "Stamm",
reason: "They viewed your profile"
},
],
}
我的问题真的是最干净、最优雅的方法是什么?我是否需要摆脱数据透视表并建立引用自身的关系?我已经研究过诸如 baum 之类的软件包,但出于某种原因(上次活跃于 4 年前),我宁愿在没有软件包的情况下这样做
【问题讨论】:
-
我认为你可以这样做:$user->suggestedUsers->pluck('user')
标签: php laravel eloquent laravel-7