我有以下数据模型:
(出版物)<-[belongsToMany]->(订阅者)
我想创建一个Nova Partition Metric,以显示每个出版物的订户数量。
我的Partition类的计算方法如下:
public function calculate(Request $request)
{
return $this->count($request, Subscriber::with('publications'), 'publication.id');
}
但是我收到“未知列”错误。有人知道如何使这项工作吗?
答案 0 :(得分:1)
您可以执行以下操作:
public function calculate(Request $request)
{
$subscribers = Subscriber::withCount('publications')->get();
return $this->result(
$subscribers->flatMap(function ($subscriber) {
return [
$subscriber->name => $subscriber->publications_count
];
})->toArray()
);
}
答案 1 :(得分:0)
计数助手仅允许按模型表上的列进行分组。它还不允许连接表。
如果您要进行更复杂的查询,并在另一个表中使用联接和group by列,则可以构建自己的结果数组,并使用结果助手返回它。
您可以在此处查看结果帮助文档:https://nova.laravel.com/docs/1.0/metrics/defining-metrics.html#customizing-partition-colors
您应该在calculate函数内创建数组(您可以在此处使用雄辩或查询生成器),然后使用结果助手返回该数组。
希望这会有所帮助!
答案 2 :(得分:0)
您可以在Subscriber表中的publication_foreign_key上进行分组,并使用-> label()方法将publication_foreign_key编辑为publication_name
赞
public function calculate(Request $request)
{
return $this->count($request, Subscriber::class, 'publication_id')
->label(function($publicationId)
{
switch($publicationId)
{
case publication_foreign_key_1 : return publication_name_1;
break;
case publication_foreign_key_2 : return publication_name_2;
break;
default: return 'Others';
}
});
}