在 Laravel Nova 中使用带有指标的模型(资源)属性(访问器)
Use a model (resource) attribute (accessor) with metrics in Laravel Nova
我有一个名为 purchases
的 MySQL table 和一个与它相关的 Laravel 中名为 Purchase
的模型。我的 table 有两列,quantity
和 unit_cost
。我的 table 中没有购买总费用的列。相反,它由 Laravel 中的访问器定义,它将 unit_cost
乘以 quantity
和 returns 将其乘以 total_cost
.
现在我试图在 Laravel nova 中定义一个趋势指标,它应该输出我在选定范围内的每日销售额值。当我尝试使用 return $this->sumByDays($request, Purchase::class, 'total_cost')
时,它给我一个错误,提示 total_cost
不是列。
很公平!因此,我尝试在第二个参数中使用 Purchase::selectRaw(DB::RAW('unit_cost * quantity AS total_cost'))
,但没有用。我看到了多个帖子,其中 none 个可以解决 Laravel Nova 指标中访问模型访问器的问题。感谢任何帮助。
很遗憾,您不能使用内置的 sumByDays
辅助函数。
不过好消息!您仍然可以在 calculate
函数中自己实现它。只要确保你的函数 returns a 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 总和。
确保导入 use Illuminate\Database\Query\Expression;
就这样做
$xpression = new Expression('quantity * unit_cost');
return $this->sumByDays($request, Purchase::class, $xpression);
它很适合我,我希望它也适合其他人。
表达式可以多种方式使用,在我的例子中是执行不同的计算。
我有一个名为 purchases
的 MySQL table 和一个与它相关的 Laravel 中名为 Purchase
的模型。我的 table 有两列,quantity
和 unit_cost
。我的 table 中没有购买总费用的列。相反,它由 Laravel 中的访问器定义,它将 unit_cost
乘以 quantity
和 returns 将其乘以 total_cost
.
现在我试图在 Laravel nova 中定义一个趋势指标,它应该输出我在选定范围内的每日销售额值。当我尝试使用 return $this->sumByDays($request, Purchase::class, 'total_cost')
时,它给我一个错误,提示 total_cost
不是列。
很公平!因此,我尝试在第二个参数中使用 Purchase::selectRaw(DB::RAW('unit_cost * quantity AS total_cost'))
,但没有用。我看到了多个帖子,其中 none 个可以解决 Laravel Nova 指标中访问模型访问器的问题。感谢任何帮助。
很遗憾,您不能使用内置的 sumByDays
辅助函数。
不过好消息!您仍然可以在 calculate
函数中自己实现它。只要确保你的函数 returns a 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 总和。
确保导入 use Illuminate\Database\Query\Expression;
就这样做
$xpression = new Expression('quantity * unit_cost');
return $this->sumByDays($request, Purchase::class, $xpression);
它很适合我,我希望它也适合其他人。
表达式可以多种方式使用,在我的例子中是执行不同的计算。