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编码数据

如何使用 CodeIgniter 3 中的外键从表中获取列数据

如何通过laravel中的外键检索记录的完整数据?

可以保存重复值的外键

如何编写一个查询,根据 ms 访问的子表中的外键获取信息?

Laravel Eloquent 关系 - 表的多列引用相同的外键