Laravel Nova Metrics分区属于多对关系

时间:2019-02-16 21:45:29

标签: laravel metrics laravel-nova

我有以下数据模型:

(出版物)<-[belongsToMany]->(订阅者)

我想创建一个Nova Partition Metric,以显示每个出版物的订户数量。

我的Partition类的计算方法如下:

public function calculate(Request $request) { return $this->count($request, Subscriber::with('publications'), 'publication.id'); }

但是我收到“未知列”错误。有人知道如何使这项工作吗?

3 个答案:

答案 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';
             }                 
           });
    }