bonjour a tous,

voila je vous expose mon petit souci avec du code je suis en train de faire une gestion de stock en commencant par enregistrer des categories,des produits ensuite trois table rentre en compte pour c'est manip voici le detail des table:

1°)Categories
(id,name,product_count)
2°)Products
(id,name,description,created,prix,qantite,category_id,marque_id)
3°)Categories_Products
(id,category_id,product_id)

ensuite voici mon probleme:
Quand je rentre un produit je l'associe a une categorie ensuite il doit s'enregistrer dans chacune des table
le hic c'est que dans la table Categories_Products la sauvegarde ce fait de maniere tres bizarre le premier produit ne s'affiche pas desuite
il s'affiche quand je rentre un second article mais il me le rentre puis il s'enregistre a nouveau c'est a dire que pour trois article rentrer
j'ai bien trois rentrer dans la bdd sauf qu'il reprend tout les article et les reenregistre et ainsi desuite.

merci de votre aide

voici le code
Product.php (modele)

public function createStocks($cat,$category_id,$product_id) {
        $this->create(array(
            'category_id' => $category_id,
            'product_id' => $product_id
        ));
        $this->CategoriesProduct->save();
        $zid = $this->getInsertID();
        foreach ($cat as $d) {
            $this->CategoriesProduct->create(array(
                'category_id' => $d'Product']'category_id'],
                'product_id' => $d'Product']'id'],
                'qte' => $d'Product']'qte']
            ));
            $this->CategoriesProduct->save();
        }
        return $zid;
    }

ProductsController.php

public function admin_add($id = null) {
        if ($this->request->is('post')) {
            $this->Product->create();
            if(!empty($this->request->data'Product']'visuel']'tmp_name'])){
                $dir = WWW_ROOT.'uploads'.DS.'products';
                $r = move_uploaded_file($this->request->data'Product']'visuel']'tmp_name'], $dir.DS.$this->request->data'Product']'visuel']'name']);
                $this->request->data'Product']'image'] = $this->request->data'Product']'visuel']'name'];
                unset($this->request->data'Product']'visuel']);
            }                   
            if($id = null){
                $this->loadModel('Product');
                $cat = $this->Product->find('all');
                $product_id = $this->Product->id;
                $category_id = $this->Product->category_id;
                $zid = $this->Product->createStocks($cat,$category_id,$product_id);
                $this->set('zid', $zid);
            }else{
                 echo 'Une erreur est survenue',"notif",array('type'=>'error');                            
                }                    
            if ($this->Product->save($this->request->data)) {                
                $this->Session->setFlash(__('The product has been saved'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The product could not be saved. Please, try again.'));
            }            
        }
        $marquesFind = $this->Product->Marque->find('all', array(
                    'fields' => array('Marque.id', 'Marque.lastname', 'Marque.firstname'),
                    'recursive' => 1
                ));
        $marques = array();
        foreach ($marquesFind as $a) {
            $a = $a'Marque'];
            $marques$a'id']] = $a'firstname'] . ' ' . $a'lastname'];
        }
        $categories = $this->Product->Category->find('list');
        $orders = $this->Product->Order->find('list');
        $this->set(compact('marques', 'categories', 'orders'));

j espere avoir ete le plus clair possible dans mes explications merci d'avance

2 réponses


antho07
Réponse acceptée

Bonjour que vaut $this->request->data lors de l'appel de l'action admin_add?

Y a-t-il un relation habtm dans le tas ?
ce serait pas plus simple d'incrémenter ou décrémenter dans un afterSave du model Produit ? Avec : si produit est nouveau => creation auto d'un stock à zéro.