我的控制器上有这个:
$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;
有没有什么方法可以更有效地从查询中引用变量?
发布于 2019-05-20 16:57:40
你必须每次都得到一个集合,而不是一个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();
来获得你想要的集合。
发布于 2019-05-20 16:55:17
你需要基于role_id
对你的集合进行filter
对于role_id
为2的情况,您需要这样做
$results = $results->filter(function ($value, $key) {
return $value->role_id == 2;
});
或者直接在第一个查询中添加where
$results = Model::where('foreign_id', $id)->where('role_id', 1)->first();
发布于 2019-05-20 16:58:14
您可以简单地添加一个first
$role_A = $results->where('role_id', 1)->first();
https://stackoverflow.com/questions/56217343
复制相似问题