此查询:
$ids = EnergyMeters::leftJoin('meteringpoint_energymeter_relation', 'energymeter.id', '=',
'meteringpoint_energymeter_relation.meterId')
->where('id', '=', $meterPointId)
->where('Deleted', '=', '0')
->select('energymeter.id')
->orderBy('name')
->get();
给了我一些id作为结果(结构为key,val)
[{"id":"03cd0c39-a51c-41a0-bbe3-37ae641d051e"},{"id":"0ebf61e7-b751-4931-b737-d8f71297e499"}, {"id"}, '...']
但是我只需要将id作为这个新求和查询的数组:
Data::select(array(DB::RAW('sum(v1) as sumV1', 'sum(v2) as sumV2')))
->whereIn('id', $ids)
->where('PointOfTime', '>', $from)
->where('PointOfTime', '<=', $to + 86400)
->get();
任何雄辩的解决方案?否则我会遍历key和val数组并将它们的值推送到一个新数组。不那么聪明吗?
//编辑问题以使其更清晰
答案 0 :(得分:3)
在第一个查询结果集上使用;
$data = Data::select(array(DB::RAW('sum(v1) as sumV1', 'sum(v2) as sumV2')))
->whereIn('id', $ids)
->where('PointOfTime', '>', $from)
->where('PointOfTime', '<=', $to + 86400)
->get();
$ids = $data->lists('id');
注意lists('id')
这将为您提供所需的数组。然后,您可以将结果传递给另一个查询。
答案 1 :(得分:1)
我相信有一个功能(它不在官方文档中)
我在Laravel的源头找到了这个:
/**
* Get an array with the values of a given column.
*
* @param string $column
* @param string $key
* @return array
*/
public function lists($column, $key = null)
{
// ... lots of code ...
}
请尝试->lists('id');
答案 2 :(得分:1)
https://laravel.com/docs/5.6/queries#retrieving-results说:
检索列值列表如果要检索包含单个列值的Collection,可以使用 采摘方法。在此示例中,我们将检索角色集合 标题:
$titles = DB::table('roles')->pluck('title');
foreach ($titles as $title) {
echo $title;
}