PHP Laravel 根据投票表的外键从问题表中获取所有问题
Posted
技术标签:
【中文标题】PHP Laravel 根据投票表的外键从问题表中获取所有问题【英文标题】:PHP Laravel get all question from question's table base on the foreign Key of vote's Table 【发布时间】:2019-10-09 14:20:33 【问题描述】:如果可以的话,我希望能够获得所有“已投票的问题”经过身份验证的用户已投票的问题。并以 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】:您可以像这样获得用户的所有投票:
用户.php
public function votes()
return $this->hasMany('App\Vote`);
您可以像这样从投票中获得所有问题:
投票.php
public function questions()
return $this->belongsTo('App\Question');
那么您应该能够访问所有这些关系,并提取相关值。
$user = Auth::user();
$userVotes = $user->votes()
->with('questions')
->get()
->pluck('question.id', 'question.title');
【讨论】:
我将其修改为“ ->pluck('question') ”以将其格式化为所需的格式。非常感谢以上是关于PHP Laravel 根据投票表的外键从问题表中获取所有问题的主要内容,如果未能解决你的问题,请参考以下文章
根据codeigniter中的外键从两个表中获取json编码数据