Bonjour,

Je suis confrontée à un problème et je ne sais pas quelle méthode serait plus adaptée : l'application gère un compte qui est divisé en sections, chacune d'elle divisée en catégories. On peut ajouter un mouvement à une catégorie avec un montant.
Lors de l'enregistrement en base de ce mouvement, il faut mettre à jour les soldes de la catégorie, de la section et du compte.
Je pensais faire ça (dans le MovementsController):

public function add($category_id) {
        $this->Movement->Category->contain('Section');
        $category = $this->Movement->Category->findById($category_id);
        $this->set(compact('category'));
        if($this->request->is('post')) {
            $this->request->data'Movement']'category_id'] = $category_id;
            $this->Movement->create();
            if ($this->Movement->save($this->request->data)) {
                //Mettre à jour les soldes

                debug($this->Movement->Category->balance);
                $this->Movement->Category->balance += $this->Movement->balance;
                debug($this->Movement->Category->balance);

                //End
                $this->Session->setFlash('Mouvement enregistré');
                $this->redirect(array('controller' => 'categories', 'action' =>'view', $category_id));
            } else {
                $this->Session->setFlash('Un problème est survenu :(');
            }
        }
    }

Mais les debugs ne sortent rien du tout. Par contre, dans ma base, les objets sont bien créés. Comment est-ce possible?
Est-ce simple à faire en cakePHP?

Je remercie d'avance ceux qui se pencheront sur mon problème :)

5 réponses


Bonjour, c'est juste ton debug qui ne fonctionne pas ?

As-tu changer ton debug dans config->core.php ?

MaeALT
Auteur

Non je ne l'ai pas changé, mais ce n'est pas juste le debug.
En fait les debugs mis autre part fonctionnent parfaitement.

J'ai avancé un peu et désormais j'en suis là :

//Mettre à jour les soldes

                $category'Category']'balance'] += $this->request->data'Movement']'balance'];
                debug($category'Category']);
                $category'Category']->saveField('balance', $category'Category']'balance']);
                //End

Mais je reçois une Error: Call to a member function saveField() on a non-object
Je ne sais pas comment je peux accéder à l'objet Category avec le bon id différemment (si je fais $this->Movement->Category->savefield(...) ça crée un nouvel enregistrement). Quelqu'un aurait-il une idée? Dois-je passer par du javascript? (Je ne maitrise pas vraiment)

Bon je veux donc mettre à jour ma jolie catégorie. Plus particulièrement le champs "balance".
Je suis dans quelle vue quand je fais cette action Categorie/edit ? On va dire que tout va bien et on va se concentrer sur ta fonction :

public function add($category_id) {
//Mettre à jour les soldes

                $category'Category']'balance'] += $this->request->data'Movement']'balance'];
                debug($category'Category']);
                //je récupère l'id de ma catégorie
                $this->Category->id = $category_id;
                // je modifie le champs de ma catégorie
                $this->Category->saveField('balance', $category'Category']'balance']);

                //End
}

N'oublies pas que tu es sur ton projet, tu comprends tout ce que tu écris mais ce n'est pas la même pour ce qui te lise.

++

Heu je ne sais pas si cela te sera utile mais une raison pour laquelle les debugs ne marchent pas vient peut être du fais que tu fais un redirect à la fin donc forcément rien ne va s'afficher.

Concernant le saveField , essayes ça :

$this->Movement->Category->saveField( 'balance', $category'Category']'balance'] );

a+

En effet le redirect pose problème pour afficher un debug
Fait un die(); juste après ton debug.