[英]Use a model (resource) attribute (accessor) with metrics in Laravel Nova
我在 Laravel 中有一个名为Purchase
purchases
model 表。 我的表有两列, quantity
和unit_cost
。 购买的总成本不是我表中的一列。 相反,它由 Laravel 中的访问器定义,它将unit_cost
乘以quantity
并将其返回为total_cost
。
现在我试图在 Laravel nova 中定义一个趋势指标,它应该是 output 我在选定范围内的每日销售额的值。 当我尝试使用return $this->sumByDays($request, Purchase::class, 'total_cost')
它给我一个错误,说total_cost
不是一列。
很公平,所以,我尝试在第二个参数中使用Purchase::selectRaw(DB::RAW('unit_cost * quantity AS total_cost'))
,但它没有用。 我看到多个帖子,没有一个可以解决在 Laravel Nova 指标中访问 model 访问器的问题。 任何帮助表示赞赏。
不幸的是,您不能使用内置的sumByDays
助手 function。
不过好消息! 您仍然可以在calculate
function 中自己实现它。 只需确保您的 function 返回Laravel\Nova\Metrics\TrendResult
。
像这样的东西:
$purchases = DB::table('purchases')
->select(DB::raw('quantity * unit_cost as total_cost'))
->groupBy(DB::raw('DATE(created_at) DESC'))
->get();
return new TrendResult()
->trend($purchases);
我目前没有时间对此进行测试,但它应该可以帮助您入门。
在尝试解决这个问题时,我检查了按天或小时代码的总和,我意识到该列是查询表达式的一个实例。
这意味着您仍然可以按天使用内置的 nova sum。
确保导入use Illuminate\Database\Query\Expression;
就这样做
$xpression = new Expression('quantity * unit_cost');
return $this->sumByDays($request, Purchase::class, $xpression);
它很容易为我工作,我希望它也适用于其他人。
在我的情况下,该表达式可以以多种方式使用,它是为了执行不同的计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.