2009-10-20 8 views
1

(structure de base de données comme CakePHP select default value in SELECT input)Champ de calcul mathématique CakePHP?

J'ai donc deux tables dans CakePHP: Trees, et Leafs. Chaque feuille a un tree_id pour son arbre correspondant. Chaque feuille a également un value numérique. L'affichage par défaut que j'ai créé pour les arbres répertorie uniquement tous les arbres d'une table. Y at-il un moyen d'ajouter une colonne dynamique à la table de cette vue qui SUMS toutes les feuilles de cet arbre et affiche la somme dans la table, ainsi qu'un autre champ indiquant le nombre de feuilles d'un arbre a?

exemple:

Leafs

Id | Tree Id | Leaf value 
-----+-----------+--------------- 
24 | 1  | 19 
70 | 1  | 33 
121 | 1  | 30 

Trees

Id | Tree | Number of leafs | Sum of leafs | Actions 
-----+--------+-------------------+----------------+------------------- 
1 | foo | 120    | 7270   | View Edit Delete 
2 | bar | 72    | 4028   | View Edit Delete 

Répondre

4

Deux idées:

Fetch le champ résumé dynamiquement chaque fois que vous avez besoin à l'aide du Containable behavior, comme (hors le dessus de ma tête):

$this->Tree->find('all', array(
    ... 
    'contain' => array(
     'Leaf' => array(
      'fields' => array('SUM(Leaf.value)'), 
      'group' => array('Leaf.tree_id') 
     ) 
    ) 
); 

Ou créer une nouvelle colonne dans le modèle d'arbre comme leaf_values et mettre à jour chaque fois que vous changez quelque chose dans le modèle Leaf:

// Leaf model 
function afterSave() { 
    $sum = /* calculate sum */; 
    $this->Tree->updateAll(
     array('Tree.leaf_values' => $sum), 
     array('Tree.id' => $this->data['Leaf']['tree_id']) 
    ); 
} 

function afterDelete() { 
    // same for afterDelete 
} 
0

Je ne pense pas que vous pouvez utiliser dans les appels groupe maîtrisables .

+0

1.3 devrait avoir un support pour cela: http://teknoid.wordpress.com/2009/10/06/top-10-things-to-look-forward-to-in-cakephp-1-3/ – deizel