【发布时间】:2015-11-30 07:35:20
【问题描述】:
我有一个从我的show 方法返回的数组。这是show方法:
public function show($id)
{
$track = Fuelconsumption::where('id', $id)->first();
return $track;
}
返回这个:
{
id: 6,
distance: 178.6,
volume: 14.31,
price: 1.45,
date: "2015-11-08 14:13:56",
created_at: "2015-11-30 03:29:57",
updated_at: "2015-11-30 03:29:57"
}
我想根据提供的值进行一些计算(平均值等),并将这些变量附加到上面的 json 数组中。
现在我正在通过在新的KpiController 中创建一个new Kpi 对象来解决这个问题。控制器将上面的array(它是一个燃料消耗对象)传递给我的constructor。
这是我KpiController的show方法:
public function show($id)
{
$item = Fuelconsumption::where('id', $id)->first();
$kpi = new Kpi($item);
return $kpi['list'];
}
Constructor 我的Kpi 班级:
protected $avgFuel;
protected $avgCost;
protected $cost;
protected $list;
/**
* Creates all necessary KPIs
*
* @param Object $item Fuelconsumption
*/
public function __construct(Fuelconsumption $item)
{
$this->avgFuel = $this->avgFuelperUnitofDistance($item);
$this->avgCost = $this->avgCostPerUnitOfDistance($item);
$this->cost = $this->cost($item);
$this->list = [
'avgFuelperUnitOfDistance' => $this->avgFuel,
'avgCostperUnitOfDistance' => $this->avgCost,
'cost' => $this->cost
];
}
它会返回一个如下所示的 Json 数组:
{
avgFuelperUnitOfDistance: 0.08,
avgCostperUnitOfDistance: 0.116,
cost: 20.75
}
我现在遇到的问题是,当我访问以下 URI 时,第一个数组被返回:
http://localhost:8000/fuelconsumption/6
当我访问这个 URI 时,第二个数组被返回:
http://localhost:8000/fuelconsumption/6/kpi
问题是我希望将两个 Json 数组合并到一个数组中,但我不知道如何实现。
这是我的想法:
修改油耗等级
将我的 FuelConsumptionController 修改为:
public function show($id)
{
$item = Fuelconsumption::where('id', $id)->first();
$kpi = new Fuelconsumption($item);
dd($kpi);
}
并且在我的Fuelconsumption 类中有一个构造函数:
class Fuelconsumption extends Model
{
protected $fillable = ['distance', 'volume', 'price', 'date'];
protected $dates = ['date'];
protected $cost;
public function __construct($item) {
$this->cost = $this->cost($item);
}
public function cost($item) {
return round($item->volume * $item->price, 2);
}
}
不幸的是,这会引发错误:
App\Fuelconsumption::__construct() 缺少参数 1
在我的理解中,因为该类甚至在我第二次在我的控制器中回忆它之前就被调用了。不知道如何解决。
第二个想法:展开 KPI 对象
包含我想要的所有其他变量,然后以某种方式在我的 FuelConsumptionController@show 方法中返回完整的数组。
第三个想法:以某种方式组合这些数组
不确定如何。
现在我相信最简单的解决方案是扩展 KPI 模型(我的第二个想法),但我希望通过以某种方式将 item 传递给我的 FuelConsumption 构造函数来完全摆脱 KPI 类。
【问题讨论】:
-
检查这个 - laravel.com/docs/5.1/…
-
谢谢,我为您的建议写了一个解决方案。与 Yorm de Langen 提供的其他解决方案相比,我将不胜感激任何建议