【发布时间】:2020-08-23 22:42:55
【问题描述】:
我有以下数据库架构:
users
id
skills
id
skill_user
id
user_id
skill_id
endorsements
id
skill_user_id
Laravel 模型定义如下:
class User extends Authenticatable
{
public function skills()
{
return $this
->belongsToMany('App\Skill')
->using(SkillUser::class)
->withPivot('endorsements_count')
->orderBy('endorsements_count', 'desc');
}
}
class Skill extends Model
{
public function users()
{
return $this
->belongsToMany('App\User')
->using(SkillUser::class)
->withPivot('user_id');
}
}
class SkillUser extends Pivot
{
public function endorsements()
{
return $this->hasMany('App\Endorsement', 'skill_user_id', 'id');
}
}
class Endorsement extends Model
{
public function skill_user() {
return $this->belongsTo('App\SkillUser');
}
}
从上面可以看出,user 可以通过名为SkillUser 的多对多表连接多个skills。此外,每个用户的技能都可以得到其他用户的认可 (endorsement)。 endorsements 在数据透视表上加入(每个 user_skill 可以有多个背书)。
现在我正试图弄清楚如何在 Laravel (Eloquent) 中构建一个查询,该查询将获取具有他所有技能的用户,并且对于每项技能,所有它都是在单个查询中的认可。
当我执行以下操作时:
User::with('skills')->findOrFail(1)->skills[0]->pivot->endorsements
它正确返回了用户和技能信息,但是枢轴(UserSkill)内部的背书是空的。此外,当我检查枢轴->关系时,它也是空的。
另一方面,如果我这样查询:
SkillUser::where('id', '=', 1)->first()->endorsements
我得到了所有的认可,所以我猜这种关系设置正确。我想我错过了以某种方式将“背书”专门包含在数据透视表中。
任何帮助将不胜感激!
【问题讨论】:
-
只是为了确定;这是你想要的“类似”回应吗? prnt.sc/se54b6
-
是的,差不多就是这样。