首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用id Laravel获取另一个表的列数据

使用id Laravel获取另一个表的列数据
EN

Stack Overflow用户
提问于 2017-02-08 15:10:29
回答 3查看 3.9K关注 0票数 1

我有一个表,它有一个列interviewer_id,它等于users表的id。我正在根据控制器中的interviewer_id对数据进行分组,并希望从users表中获取属于每个组的id的名称。这是我尝试过的

代码语言:javascript
复制
$int_payment = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->get();
    foreach ($int_payment as $inter) {
        $inters = User::where('id',$inter->interviewer_id)->get();

    }
    return response()->json(['inters',$inters]);

在这里,我的响应只显示了它通过User获取的一个组数据。我想从users表中获取行,该行的id是组的ID

这就是我真正想要的。当我返回$int_payment作为响应时,我得到了这个响应。

代码语言:javascript
复制
["inters",[{"id":2,"candidate_id":"13","interviewer_id":"1","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":4,"candidate_id":"13","interviewer_id":"2\r\n","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":1,"candidate_id":"13","interviewer_id":"4","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"}]]

如果您看到响应,就会发现有三个id为2、4和1的组。这些id是user表中用户的id。我想要获取属于I的用户名。

EN

回答 3

Stack Overflow用户

发布于 2017-02-08 15:36:31

尝试在数组中返回$inters

代码语言:javascript
复制
foreach ($int_payment as $inter) {
        $inters[] = User::where('id',$inter->interviewer_id)->get();
    }
return $inters;

然而,在用户和IntPayment模型之间建立关系将更容易处理这种情况。请参阅文档Eloquent relationship.中的

票数 3
EN

Stack Overflow用户

发布于 2017-02-08 15:18:16

试试这个:

代码语言:javascript
复制
IntPayments::select('interviewr_TABLE.*', 'users.name')->where('month',$month_year)->leftJoin('users', 'users.id', '=', 'interviewr_TABLE') ->groupBy('interviewer_id')->get()

这里唯一的问题是我不知道您的IntPayments表名到底是什么。

票数 0
EN

Stack Overflow用户

发布于 2017-02-08 18:27:29

只需使用Laravel模型关系就可以让生活更轻松:

让你的User模型拥有:

代码语言:javascript
复制
public function intpayments(){
    $this->hasMany(IntPayments::class, 'interviewer_id');
}

那么你的IntPayments模型有:

代码语言:javascript
复制
public function user(){
    $this->belongsTo(User::class, 'interviewer_id');
}

因此,您可以使用以下命令轻松检索您想要的结果:

代码语言:javascript
复制
$inters = IntPayments::where('month',$month_year)->load('user');

然后,您可以遍历此结果以获得您需要的字段,例如:

代码语言:javascript
复制
$result = [];
    foreach($inters as $inter)
    {
       $result[] = $inter->user->name;
    }
return $result;

更新:

,但我只想要该表中的name列,而来自IntPayments的数据是我的第一要务

好的,所以您仍然可以使用从查询返回的相同结果:

代码语言:javascript
复制
$result = [];
    foreach($inters as $k => $inter)
    {
       $result[$k]['name'] = $inter->user->name; //this is the user's name
       $result[$k]['id'] = $inter->id; //this is intPayments's id
       $result[$k]['interviewer_id'] = $inter->interviewer_id; //this is intPayments interviewer's 'id
       ......
    }

您可能不知道,$inters变量的结果将首先显示IntPayments中的每条记录,然后显示每条记录的User

这意味着inters自然会像这样(如果我将响应作为json发送):

代码语言:javascript
复制
[
  {
    "id": 1,
    "candidate_id": "1",
    "interviewer_id": "3"
    "user": {
      "id": 1,
      "name": "second last",
      "email": "second@somemail.com",
    }
  },
  {
    "id": 2,
    "candidate_id": "1",
    "interviewer_id": "5",
    "user": {
    "id": 1,
      "name": "first last",
      "email": "first@somemail.com",
    }
  },
  .....
]

这意味着您可以随心所欲地使用此响应,并访问所需的字段。

希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42106826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档