Laravel 5.4 - 当模型有2个foreigns时,我如何能得到正确的关系

时间:2017-08-23 14:01:50

标签: php laravel eloquent

我有4张桌子,

user_challenges

  • id
  • challenge_id
  • USER_ID

user_scores

  • ID
  • USER_ID
  • challenge_id

用户

  • ID
  • 名称

挑战

  • ID
  • 标题

如何在UserChallenge模型中获取user_scores值?

在eagerloading中可以使用的正确关系是什么。

我需要这样的东西:

public function scores ()
{
return UserScore::where('user_id', $this->user_id)->where('challenge_id', $this->challenge_id);
}

3 个答案:

答案 0 :(得分:1)

我认为您在查询结束时错过了->get()来电。

尝试:

public function scores ()
{
    return UserScore::where('user_id', $this->user_id)->where('challenge_id', $this->challenge_id)->get();
}

答案 1 :(得分:0)

您的设置没有任何关系(afaik)。您寻求两个数据透视表之间的关系,这是非常罕见的。

我认为你有两种可能性:
1)将它们合并到1个表中 2)user_scores不应该有user_id和challenge_id,而是一个关键user_challenges_id,并且应该与belongs_challenges属于belongsTo关系。

答案 2 :(得分:0)

使用UserChallenge模型时,有两种方法可以获得user_scores。 您可以使用“查询”构建器,就像您的示例中一样。你只需要添加->get();即可,或者它无法正常工作。

其次,您可以使用您定义的关系。 例: $userChallenge = UserChallenge::find(1); return $userChallenge->user->user_scores

如果您已正确定义关系,则每个模型都可以在更深层次链接到下一个模型