根据 属性 名称将 Eloquent 集合拆分为多个数组
Split Eloquent collection into multiple arrays based on property name
我正在使用 Laravel 图表创建图表,并且我正在从 Eloquent 查询中获取列(时间段)和数据集。
我的查询 returns 一个数组,如下所示:
Period
Amount
01/21
200.00
02/21
150.00
03/21
175.00
...
...
Laravel 图表要求您输入图表标签数组和图表值数组。目前,我以这种方式创建和填充数组:
//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);
是否有“更原生”的方式来做到这一点?
假设您使用的是 Laravel >=5.4,一种选择是将 Higher order messages 用于集合,例如
$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());
如果你想用更少的行做同样的事情,你可以使用 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)
适用于简单对象、数组甚至集合,returns 数组。 5.5版本开始在框架中
我正在使用 Laravel 图表创建图表,并且我正在从 Eloquent 查询中获取列(时间段)和数据集。
我的查询 returns 一个数组,如下所示:
Period | Amount |
---|---|
01/21 | 200.00 |
02/21 | 150.00 |
03/21 | 175.00 |
... | ... |
Laravel 图表要求您输入图表标签数组和图表值数组。目前,我以这种方式创建和填充数组:
//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);
是否有“更原生”的方式来做到这一点?
假设您使用的是 Laravel >=5.4,一种选择是将 Higher order messages 用于集合,例如
$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());
如果你想用更少的行做同样的事情,你可以使用 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)
适用于简单对象、数组甚至集合,returns 数组。 5.5版本开始在框架中