检索数组而不是key:val(laravel / eloquent)

时间:2014-11-07 14:08:10

标签: php laravel eloquent

此查询:

$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数组并将它们的值推送到一个新数组。不那么聪明吗?

//编辑问题以使其更清晰

3 个答案:

答案 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)

&#39;词典&#39;已被重命名为&#39; pluck&#39;

https://laravel.com/docs/5.6/queries#retrieving-results说:

  

检索列值列表如果要检索包含单个列值的Collection,可以使用   采摘方法。在此示例中,我们将检索角色集合   标题:

$titles = DB::table('roles')->pluck('title');

foreach ($titles as $title) {
    echo $title;
}