首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >引用查询的查询中的变量

引用查询的查询中的变量
EN

Stack Overflow用户
提问于 2019-05-20 16:50:13
回答 3查看 52关注 0票数 1

我的控制器上有这个:

代码语言:javascript
复制
$results = Model::where('foreign_id', $id)->get();

结果是:

代码语言:javascript
复制
Collection {#111 ▼
  #items: array:3 [▼
    0 => Model {#112 ▶}
    1 => Model {#113 ▶}
    2 => Model {#114 ▶}
  ]
}

但是,我需要使用以下命令进一步访问$results

代码语言:javascript
复制
$role_A = $results->where('role_id', 1);
$role_B = $results->where('role_id', 2);
$role_C = $results->where('role_id', 3);

我的问题是,如果我通过以下方式引用它们,则会出现错误:

代码语言:javascript
复制
$user_A = $role_A->created_at;
$user_B = $role_B->created_at;
$user_C = $role_C->created_at;

我仍然需要像这样包括他们的索引位置:

代码语言:javascript
复制
$user_A = $role_A[1]->created_at;

我的问题是无法知道索引位置以便我引用它们,例如,$user_A可以是下面的任何一个。

代码语言:javascript
复制
$user_A = $role_A[0]->created_at;
$user_A = $role_A[1]->created_at;
$user_A = $role_A[2]->created_at;

有没有什么方法可以更有效地从查询中引用变量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-20 16:57:40

你必须每次都得到一个集合,而不是一个QueryBuilder。

例如,执行以下操作

代码语言:javascript
复制
$role_A = $results->where('role_id', 1)->first();
$role_B = $results->where('role_id', 2)->first();
$role_C = $results->where('role_id', 3)->first();

来获得你想要的集合。

票数 1
EN

Stack Overflow用户

发布于 2019-05-20 16:55:17

你需要基于role_id对你的集合进行filter

对于role_id为2的情况,您需要这样做

代码语言:javascript
复制
$results = $results->filter(function ($value, $key) {
    return $value->role_id == 2;
});

或者直接在第一个查询中添加where

代码语言:javascript
复制
$results = Model::where('foreign_id', $id)->where('role_id', 1)->first();
票数 2
EN

Stack Overflow用户

发布于 2019-05-20 16:58:14

您可以简单地添加一个first

代码语言:javascript
复制
$role_A = $results->where('role_id', 1)->first();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56217343

复制
相关文章

相似问题

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