从查询中引用变量

时间:2019-05-20 08:50:13

标签: php laravel

我的控制器上有这个

$results = Model::where('foreign_id', $id)->get();

结果是:

Collection {#111 ▼
  #items: array:3 [▼
    0 => Model {#112 ▶}
    1 => Model {#113 ▶}
    2 => Model {#114 ▶}
  ]
}

但是,我需要通过以下内容进一步访问$results

$role_A = $results->where('role_id', 1);
$role_B = $results->where('role_id', 2);
$role_C = $results->where('role_id', 3);

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

$user_A = $role_A->created_at;
$user_B = $role_B->created_at;
$user_C = $role_C->created_at;

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

$user_A = $role_A[1]->created_at;

我的问题是我无法知道索引位置以供我参考,例如,$user_A可以是以下任意一个。

$user_A = $role_A[0]->created_at;
$user_A = $role_A[1]->created_at;
$user_A = $role_A[2]->created_at;

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

3 个答案:

答案 0 :(得分:2)

您需要根据role_idfilter

对于role_id(您有2个人)

$results = $results->filter(function ($value, $key) {
    return $value->role_id == 2;
});

或直接在第一个查询中添加位置

$results = Model::where('foreign_id', $id)->where('role_id', 1)->first();

答案 1 :(得分:1)

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

例如,执行类似的操作

$role_A = $results->where('role_id', 1)->first();
$role_B = $results->where('role_id', 2)->first();
$role_C = $results->where('role_id', 3)->first();

获得想要的收藏。

答案 2 :(得分:0)

您只需添加一个first

$role_A = $results->where('role_id', 1)->first();