0

我正在使用 Laravel Charts 创建一个图表,并且从 Eloquent 查询中获取列(时间段)和数据集。

我的查询返回如下数组:

时期 数量
01/21 200.00
02/21 150.00
03/21 175.00
... ...

Laravel Charts 要求您为图表标签输入一个数组,为图表值输入一个数组。目前,我以这种方式创建和填充数组:

//the function getData returns the table above as an Eloquent Collection
$form_data = $this->getData($initial_date, $final_date, $product_list, $group);
$labels = [];
$dataset = [];
foreach ($form_data as $data) {
    array_push($labels, $data->period);
    array_push($dataset, $data->amount);
}
$chart->labels($labels);
$chart->dataset('My dataset', 'line', $dataset);

有没有“更本土”的方式来做到这一点?

4

2 回答 2

2

假设您使用 Laravel >=5.4,一种选择是使用带有集合的高阶消息,例如

$form_data->map->period->toArray()

这意味着您的代码将类似于:

$form_data = $this->getData($initial_date, $final_date, $product_list, $group);

$chart->labels($form_data->map->period->toArray());
$chart->dataset('My dataset', 'line', $form_data->map->amount->toArray());

或者,(如评论中所述)您也可以使用pluck

$form_data = $this->getData($initial_date, $final_date, $product_list, $group);

$chart->labels($form_data->pluck('period')->toArray());
$chart->dataset('My dataset', 'line', $form_data->pluck('amount')->toArray());
于 2021-05-18T15:08:42.640 回答
1

data_get()如果你想用更少的行做同样的事情,你可以使用。

$form_data = $this->getData($initial_date, $final_date, $product_list, $group);

$chart->labels(data_get($form_data, '*.period');
$chart->dataset('My dataset', 'line', data_get($form_data, '*.amount'));

data_get($target, $key, $default = null)适用于简单的对象、数组甚至集合,并返回一个数组。自 5.5 版本以来,它一直在框架中。

于 2021-05-18T15:09:59.597 回答