IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

creation des model pour une table avec des clés etrangères [ZF 1.11]


Sujet :

Zend Framework PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut creation des model pour une table avec des clés etrangères
    bonjour je debute en zend framework, je veux creer des CRUD pour une table stock qui contient des cles etrangers des table fournisseur et médicament j'arrive a faire des CRUD pour les fournisseur et medicament et pour ma table stock j'y arrive pas .

    voici ma base de données:


    Médicament (code-médicament, libellé médicament, famille, forme).

    Stock (num-lot, date d’achat, date -péremption, quantité stock, prix unitaire,#code-médicament, #code-fournisseur).

    Fournisseur (code-fournisseur, raison social, adresse, ville, tel).
    pour medicament et fournisseur j'utilise le tutoriel debuter avec zend framework 1.10 de developpez.com mais la table stock j'arrive pas a trouver des tutoriel qui réalise ces genre de cas avec des clés étrangères si quelqu'un a une idée pour les faire et si des requêtes personnalisées a faire je suis preneur et merci d'avance

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Dans tes modèles, il va falloir utiliser Zend_Db_Table relationship pour faire du 1to1, 1toMany, ManyTo1 ou ManyToMany.

    Cette méthode n'utilisera pas de jointure ou quoi que ce soit du genre, mais bien plusieurs requêtes SQL.

    Si tu as besoin de détails, hésites pas !

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    bonjour merci de votre aide , j'ai lue ces articles mais j ai toujours de problèmes de compréhension .

    voici ce que je fais :

    mon model sotck :


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    <?php
    
    class Application_Model_DbTable_Stock extends Zend_Db_Table_Abstract
    {
    
        protected $_name = 'stock';
         
    	 
    	   public function obtenirStock($id)
    					{
    							$id = (int)$id;
    							$row = $this->fetchRow('id_stock = ' . $id);
    							if (!$row) {
    							throw new Exception("Count not find row $id");
    							}
    							return $row->toArray();
    					}
    					
    					
    		public function ajouterStock($date_stock, $date_peremption, $qte_stock,$prix_unitaire,$id_med,$id_fourn)
    						{
    							$data = array(
    							'date_stock' => $date_stock,
    							'date_peremption' => $date_peremption,
    							'qte_stock' => $qte_stock,
    							'prix_unitaire' => $prix_unitaire,
    							'medicament'=> array (
    							 'id_med'=>$id_med,
    							  ),
    							 'fournissseur'=> array (
    							   'id_fourn'=>$id_fourn,
    							 ),
    							);
    							$this->insert($data);
    						}
    
    				
    }


    mon controller


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    
    <?php
    
    class StockController extends Zend_Controller_Action
    {
    
        public function init()
        {
            /* Initialize action controller here */
        }
    
        public function indexAction()
        {
            // action body
        }
    
        public function ajouterAction()
        {
            $form = new Application_Form_Stock();
    		  //   $form->envoyer->setLabel('Medicament');
    				$this->view->form =$form;
    				if ($this->getRequest()->isPost()) 
    		 {
    				$formData = $this->getRequest()->getPost();
    				if ($form->isValid($formData))
    			 {
    				$medicament = $form->getValue('id_med');
    				$fournisseur = $form->getValue('id_fourn');
    				$date_achat = $form->getValue('date_achat');
    				$date_peremption = $form->getValue('date_peremption');
    				$qte_stock = $form->getValue('qte_stock');
    				$prix_unitaire = $form->getValue('prix_unitaire');
    				$stock = new Application_Model_DbTable_Stock();
    				$stock->ajouterStock($date_achat,$date_peremption,$qte_stock,$prix_unitaire,$medicament,$fournisseur);
    				$this->_helper->redirector('lister');
    			 } 
    			  else
    			 {
    				$form->populate($formData);
    			 }
             }
        }
    
        public function supprimerAction()
        {
            // action body
        }
    
        public function modifierAction()
        {
            // action body
        }
    
        public function listerAction()
        {
           $stock = new Application_Model_DbTable_Stock();
              $this->view->stock = $stock->fetchAll();
    		  
        }
    
    
    }


    mon form stock

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    <?php
     
    class Application_Form_Stock extends Zend_Form
    {
     
        public function init()
        {
     
     
            $this->setName('stock');
    		$id= new Zend_Form_Element_Hidden('id_stock');
    		$id->addFilter('Int');
     
    		$medicamentTab = new Application_Model_DbTable_Medicament();
            $medicamentRows = $medicamentTab->getMedicament();
            $medicaments   = array();
     
    		foreach ($medicamentRows as $row) {
                $medicaments[$row->id_med] = $row->libelle_med;
            }
     
    		 $medicament= new Zend_Form_Element_Select('id_med');
    		$medicament->setLabel('Medicament')
    		           ->setMultiOptions($medicaments)
                       ->setValue(0)
                       ->getDecorator('label')->setOption('tag', NULL);
     
     
     
    		$fournisseurTab = new Application_Model_DbTable_Fournisseur();
            $fournisseurRows = $fournisseurTab->getFournisseur();
            $fournisseurs   = array();
     
    		foreach ($fournisseurRows as $rows) {
                $fournisseurs[$rows->id_fourn] = $rows->raison_social;
            }
     
     
    		$fournisseur= new  Zend_Form_Element_Select('id_fourn');
    		$fournisseur->setLabel('Fournisseur')
    		            ->setMultiOptions($fournisseurs)
                        ->setValue(0)
                       ->getDecorator('label')->setOption('tag', NULL);
     
     
     
    		$date_achat= new  Zend_Form_Element_Text('date_achat');
    		$date_achat->setLabel('Date d achat')
    		       ->setRequired(true)
                   ->addFilter('StripTags')
                   ->addFilter('StringTrim')
                   ->addValidator('NotEmpty');
     
    	    $date_peremption= new  Zend_Form_Element_Text('date_peremption');
    		$date_peremption->setLabel('Date de  peremption')
    		       ->setRequired(true)
                   ->addFilter('StripTags')
                   ->addFilter('StringTrim')
                   ->addValidator('NotEmpty');
     
     
     
    		$qte_stock= new  Zend_Form_Element_Text('qte_stock');
    		$qte_stock->setLabel('Quantite Stock')
    		       ->setRequired(true)
                   ->addFilter('StripTags')
                   ->addFilter('StringTrim')
                   ->addValidator('NotEmpty');
     
    		$prix_unitaire= new  Zend_Form_Element_Text('prix_unitaire');
    		$prix_unitaire->setLabel('Prix Unitaire')
    		       ->setRequired(true)
                   ->addFilter('StripTags')
                   ->addFilter('StringTrim')
                   ->addValidator('NotEmpty');
     
     
    		$envoyer = new Zend_Form_Element_Submit('envoyer');
             $envoyer->setAttrib('id_stock', 'boutonenvoyer');
             $this->addElements(array($id, $medicament, $fournisseur,$date_achat,$date_peremption, $qte_stock,$prix_unitaire, $envoyer));
     
        }
     
     
     
    }


    mais après exécution de mon formulaire j ai cette erreur:

    An error occurred
    Application error

    je pense mon probleme doit etre au niveau de mon model (ma méthode ajouteStock() la fonction dont j'ai defini les clés étrangers )

    merci d'avance de votre aide .

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    bonjour,

    pour pouvoir afficher les erreurs il faut se mettre en environnement de développement. cela suppose de mettre ceci dans le fichier .htaccess(ou dans le le vhost):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetEnv APPLICATION_ENV development
    ensuite, vérifies si les données provenant du formulaire sont toutes reçues(en faisant un debug) dans l'action ajouterStock:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
    public function ajouterAction()
        {
            $form = new Application_Form_Stock();
    		  //   $form->envoyer->setLabel('Medicament');
    				$this->view->form =$form;
    				if ($this->getRequest()->isPost()) 
    		 {
    				$formData = $this->getRequest()->getPost();
    				if ($form->isValid($formData))
    			 {
    				$medicament = $form->getValue('id_med');
    				$fournisseur = $form->getValue('id_fourn');
    				$date_achat = $form->getValue('date_achat');
    				$date_peremption = $form->getValue('date_peremption');
    				$qte_stock = $form->getValue('qte_stock');
    				$prix_unitaire = $form->getValue('prix_unitaire');
    				$stock = new Application_Model_DbTable_Stock();
    				//$stock->ajouterStock($date_achat,$date_peremption,$qte_stock,$prix_unitaire,$medicament,$fournisseur);
     Zend_Debug::dump($form->getValues() );
    				//$this->_helper->redirector('lister');
    			 } 
    			  else
    			 {
    				$form->populate($formData);
    			 }
             }
        }
     
    ?>

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci j'ai résolue mon problème c’était ça mon problème l'affichage des erreurs , j'ai trouvé ou ça clocher merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] compléter une table avec des infos d'une autre table
    Par ttfme dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/03/2015, 13h17
  2. [AC-2003] Compléter une table avec des données d'autres tables
    Par Tchebichef dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/11/2012, 11h55
  3. Ajouter des champ dans une table avec une procedure sp
    Par Abdou1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/07/2006, 18h32
  4. Liaison avec des images dans une table
    Par ValérieBruxelles dans le forum Access
    Réponses: 5
    Dernier message: 25/11/2005, 14h21
  5. Réponses: 4
    Dernier message: 31/05/2004, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo