1
votes

La partition Laravel Nova Metrics appartient à la relation ToMany

J'ai le modèle de données suivant:

(Publication) <- [AppartToMany] -> (Abonné)

Je souhaite créer une métrique de partition Nova pour afficher le nombre d'abonnés pour chaque publication.

La méthode de calcul de ma classe Partition ressemble à ceci:

fonction publique calculer (Request $ request) { return $ this-> count ($ request, Subscriber :: with ('publications'), 'publication.id'); }

Mais j'obtiens une erreur "colonne inconnue". Quelqu'un sait comment faire fonctionner cela?


2 commentaires

Nova n'est-elle pas un système que vous devez acheter? Si tel est le cas, n'est-il pas accompagné d'un soutien?


Le troisième paramètre doit être publications.id


3 Réponses :


0
votes

L'assistant de comptage permet uniquement de regrouper par colonne sur la table du modèle. Cela ne permet pas non plus de joindre des tables.

Si vous voulez une requête plus complexe, avec une jointure et un groupe par colonne dans une autre table, vous pouvez créer votre propre tableau de résultats et le renvoyer avec l'assistant de résultats.

Vous pouvez voir les documents d'aide aux résultats ici: https://nova.laravel.com/docs/1.0/metrics/defining-metrics.html#customizing-partition-colors

Vous devez créer votre tableau (vous pouvez utiliser le générateur d'éloquent ou de requête ici) dans la fonction de calcul, puis renvoyer ce tableau avec l'assistant de résultats.

J'espère que cela vous aidera!


0 commentaires

4
votes

Vous pouvez faire quelque chose comme ceci:

public function calculate(Request $request)
{
    $subscribers = Subscriber::withCount('publications')->get();

    return $this->result(
        $subscribers->flatMap(function ($subscriber) {
            return [
                $subscriber->name => $subscriber->publications_count
            ];
        })->toArray()
    );
}


0 commentaires

0
votes

Vous pouvez faire de groupBy sur publication_foreign_key dans la table Subscriber et modifier la publication_foreign_key en publication_name en utilisant -> la méthode label ()

Comme ceci

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


0 commentaires