PHP Laravel基于投票表的外键从问题表中获取所有问题

时间:2019-10-09 14:20:33

标签: php laravel laravel-6

如果可以的话,我希望能够获得所有“ 已投票问题”,这些已通过身份验证的用户已投票。并以json格式返回。

我想从投票表“ question_id ”中引用问题。

问题表:

id(PK)| title | description | created_at | updated_at
  • 问题模型有很多票

    class Question extends Model
    {
      public function votes()
      {
        return $this->hasMany(Vote::class, 'question_id');
      }
    }
    

投票表:

id(PK) | answer_id(FK) | question_id(FK) | user_id(FK)
  • 投票模式属于问题

    class Vote extends Model
    {
      public function question()
      {
        return $this->belongsTo(Question::class, 'question_id');
      }
    }
    

过滤方法:将返回所有投票的问题以及投票(我只想要问题)

public function filtered()
    {
        $user_id = Auth::user()->id;
        $votes = Vote::with('question')->where('user_id', $user_id)->get();
        $votes->makeVisible('question');
        return response()->json($votes);
    }

我能够通过投票模型获得所有“投票问题”。但我只想问一个问题。

当前结果:对已投票的问题进行投票

 [
    {
        "id": 1,
        "question_id": 1,
        "answer_id": 2,
        "user_id": 1,
        "question": {
            "id": 1,
            "title": "a question this user voted",
        }
    },
    {
        "id": 2,
        "question_id": 2,
        "answer_id": 3,
        "user_id": 1,
        "question": {
            "id": 2,
            "title": "another question this user voted",
        }
    }
]

所需结果:仅已投票的问题

 [
     {
       "id": 1,
       "title": "a question this user voted",
     },
     {
       "id": 2,
       "title": "another question this user voted",
    }
]

这可能吗?如果没有,将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以像这样获得用户的所有投票:

User.php

public function votes()
{
    return $this->hasMany('App\Vote`);
}

您可以像这样从投票中获得所有问题:

Vote.php

public function questions()
{
    return $this->belongsTo('App\Question');
}

然后,您应该能够访问所有这些关系,并获取相关值。

$user = Auth::user();
$userVotes = $user->votes()
    ->with('questions')
    ->get()
    ->pluck('question.id', 'question.title');