Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

j'ai toirs table (patient, patientinterne,Serviceorientation) avec comme relation Patient hasMany patientinterne, Serviceorientation hasMany Patientinterne

voicic ce que donne mes models:

public $name = 'Patientinterne';

    public $belongsTo = array(
        'Patient' => array(
                'className'  => 'Patient',
                'foreignKey' => 'patients_id',
                'counterCache' => true
                ),
        'Servicesorientation' => array(
                'className'  => 'Servicesorientation',
                'foreignKey' => 'servicesorientations_id',
                'counterCache' => true
                )

        );

        Pour le service orientation j'ai ceci:

        public $name = 'Servicesorientation';

    public $hasMany = array(
        'Stagiaire' => array(

                'className'  => 'Stagiaire',
                'foreignKey' => 'servicesorientations_id',
                'dependent' =>   true
                ),
        'Patientinterne' => array(

                'className'  => 'Patientinterne',
                'foreignKey' => 'servicesorientations_id',
                'dependent' =>   true
                ),
        'Themestage' => array(
                'className'  => 'Themestage',
                'foreignKey' => 'servicesorientations_id',
                'dependent' =>   true
                )   
        );
        et pour le patient 
        public $name = 'Patient';
    public $hasMany = array(
        'Patientexterne' => array(

                'className'  => 'Patientexterne',
                'foreignKey' => 'patients_id',
                'dependent' =>   true
                ),
        'Patientinterne' => array(

                'className'  => 'Patientinterne',
                'foreignKey' => 'patients_id',
                'dependent' =>   true
                )   
        );

        dans mon formulaire d'enregistrement, j'ai ceci:

        <?php echo $this->set('title_for_layout','Gestion Hopital | Ajout d\' un nouvel patient interne '); ?>

<div class="panel panel-primary panel-patient">
<div class="panel-heading">

    <p>
         <strong class="panel-title">Nouveau Patient interne</strong> <span class="title-top">
        <?php echo $this->Html->link('',array('admin' =>true,'controller' => 'Personnels','action' => 'index','full_base' => true),array('class'=> 'btn btn-default btn-xs glyphicon glyphicon-remove','title' => 'Retirer'),'Êtes vous sure de vouloir Fermer cette plage ?'); ?>

         </span>
    </p>

  </div>

<div class="panel-body">

                                    <?php echo $this->Form->create('Patient',array('class'=>'form-inline')); ?>

                                  <div class="col-lg-6">

                                            <div class="col-lg-12 line-input">
                                                    <?php
                                                    echo $this->Form->input('Patient.cas_patologie', array('label'=>' Pathologie *','class'=>'form-control','required'=>true,'options'=>array('1'=>'Nouveau Cas','2'=>'Ancien Cas'),'empty'=>'(Choississez)'));
                                                ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patient.nom_patient', array('label'=>'Nom du patient* &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer le nom','required'=>true));

                                                 ?>

                                            </div>
                                            <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.prenom_patient', array('label'=>'Prénom du patient* &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer le prénom','required'=>true));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php
                                                    echo $this->Form->input('Patient.sexe', array('label'=>' Sexe *','class'=>'form-control','required'=>true,'options'=>array('M'=>'Masculin','F'=>'Féminin'),'empty'=>'(Choississez)'));
                                                ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.age', array('label'=>'Age &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Age du patient','required'=>true));

                                                 ?>
                                            </div>
                                                    <div class="col-lg-12 line-input">

                                                <?php
                                                    echo $this->Form->input('Patient.statut_patient', array('label'=>' Statut *','class'=>'form-control','required'=>true,'options'=>array('MM'=>'Marié régime monogamique','MP'=>'Marié régime polygamique','CO'=>'Cohabitation','CE'=>'Célibataire','VE'=>'Veuve (Veuf)','DI'=>'Divorcé'),'empty'=>'(Choississez)'));
                                                ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php
                                                    echo $this->Form->input('Patient.identification_femme_enceinte', array('label'=>' Femme enceinte *','class'=>'form-control','required'=>true,'options'=>array('1'=>'OUI','2'=>'NON'),'empty'=>'(Choississez)'));
                                                ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.profession', array('label'=>'Profession &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Profession','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.ville_patient', array('label'=>'Ville &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Ville de résidence','required'=>true));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.lieuderesidence', array('label'=>'Quartier &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Quartier','required'=>true));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                    <?php

                                                echo $this->Form->input('Patient.nom_parain', array('label'=>'Parain à prévenir &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Personne à prévenir','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patient.numphoneparain', array('label'=>'Téléphone Portable/Fixe *','type' => 'text','class'=>'form-control','placeholder'=>'Entrer le numero de telephone','required'=>true,'id' => 'idclasse'));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php
                                                    echo $this->Form->radio('Patient.reference_patient',array('1'=>'OUI','2'=>'NON'),array('legend'=>' Référence Patient *','class'=>'form-control','required'=>true,'separator' => '&nbsp;&nbsp;&nbsp;'));
                                                ?>
                                            </div>

                                  </div>
                                  <div class="col-lg-6">

                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patientinterne.0.temperature', array('label'=>'Température &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Température','required'=>true));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patientinterne.0.poid', array('label'=>'Poid &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Poid','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patientinterne.0.taille', array('label'=>'Taille &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Taille','required'=>true));

                                                 ?>
                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patientinterne.0.frequence', array('label'=>'Fréquence &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Fréquence','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patientinterne.0.tension_arterielle', array('label'=>'Tension artérielle &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Tension artérielle','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">
                                                        <?php

                                                echo $this->Form->input('Patientinterne.0.type_priseencharge', array('label'=>'Type de prise en charge financière &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Type de prise en charge financière','required'=>true));

                                                 ?>

                                            </div>
                                            <div class="col-lg-12 line-input">
                                                <?php   

                                                        echo $this->Form->input('Patientinterne.0.servicesorientations_id', array('label' => 'Service d\'orientation *','empty' => array('---Choisir le Service---'),'class'=>'form-control classcycle','options' => $listeservice));

                                                 ?>     

                                            </div>
                                                <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patient.signe_symptome', array('label'=>'Signes et symptômes','type' => 'textarea','class'=>'form-control','placeholder'=>'Signes et symptômes'));

                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('Patient.observation', array('label'=>'Observation','type' => 'textarea','class'=>'form-control','placeholder'=>'Observations'));

                                                 ?>
                                            </div>

                                        <div class="crlfix"></div>
                                            <div class="col-lg-10 line-input">
                                            <p class="form-validation" >
                                                    <?php
                                                            echo $this->Form->button(' Créer', array('type'=>'submit','class'=>'btn btn-primary btn-submit glyphicon glyphicon-ok'));
                                                            echo $this->Form->button(' Annuler', array('type'=>'reset','class'=>'btn btn-default btn-reset glyphicon glyphicon-refresh')); 

                                                            echo $this->Form->end();

                                                    ?>
                                            </p>
                                            </div>

                                  </div>

  </div>

  <div class="panel-footer"></div>
</div>

Ce que je veux

c'est que dans mon controlleur PatientsControlleur que lorsque je fais ceci:

public function admin_addpatientinterne()
    {
        $this->layout = "page";
        $this->loadModel('Servicesorientation');
        $listeservice = $this->Servicesorientation->find('list',array(
                    'fields' => array('id', 'nom_service'),
                    'recursive' => -1

                                ));
        $this->set(compact('listeservice'));
        if($this->request->is('post'))
        {

                $this->Patient->create();
                $this->Patient->set($this->request->data);
                $idpersonnel = $this->Auth->user('personnels_id');

                if($this->Patient->Patientinterne->validates())

                {

                            $this->request->data['Patient']['telephone'] = $this->request->data['Patient']['numphoneparain'];
                            $this->request->data['Patient']['formsanitaire_referer'] = 'Douala';
                            $this->request->data['Patient']['code-patient'] = 'Douala';
                            $this->request->data['Patient']['personnels_id'] = $idpersonnel;
                            debug($this->request->data);

                            if($this->Patient->saveAssociated($this->request->data, array('deep'=>true,'callbacks' =>true,'fieldList' =>array('cas_patologie','nom_patient','prenom_patient','sexe','age','statut_patient','identification_femme_enceinte','code_patient','profession','ville_patient','lieuderesidence','telephone','nom_parain','numphoneparain','reference_patient','formsanitaire_referer','signe_symptome','observation','personnels_id'))))
                            //if($this->Patient->saveAssociated($this->request->data, array('callbacks'=>true,'deep'=>true,'validate'=>true)))
                                {

                                        $this->Session->setFlash('Patient sauvegarder avec success','default',array('class'=>'alert alert-success'));

                                        return $this->redirect(array('admin' =>true,'Controller' => 'Personnels','action' => 'listethemestagiaire'));                                                               

                                }
                                else
                                {
                                    debug($this->request->data);
                                    $this->Session->setFlash('Erreur de sauvegarde, verifiez vos informations. veuillez entrer des données différentes','default',array('class'=>'alert alert-info'));
                                }

                }

                else
                {

                    $this->Session->setFlash('Erreur de sauvegarde, verifier vos informations, elles présentent des érreurs de validation','default',array('class'=>'alert alert-warning'));
                }

        }

    }

que cela puisse enregistrer dans ma base de donnée tous les informations en un seul coup
j'avoue c'est pas la première fois que j'utilise la fonction saveAssociated mais voici le resultat que je recoit:

Ce que j'obtiens

Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (bdhopital.patientinternes, CONSTRAINT fk_patientinternes_servicesorientations1 FOREIGN KEY (servicesorientations_id) REFERENCES servicesorientations (id) ON DELETE NO ACTION ON UPD)

SQL Query: INSERT INTO bdhopital.patientinternes (patients_id, modified, created) VALUES (1, '2016-01-24 16:47:27', '2016-01-24 16:47:27')

Je ne sais pas ou se trouve l'erreur car j'ai respecter la structure de cake.
j'utilise cakephp 2.7
pardon quelqu'un sais ou se trouve l'erreur?

3 réponses


romses
Auteur
Réponse acceptée

Oui , etrangement le problème a été résolu je ne sais pas comment mais j'étais obligé de changer de BD comme tu as dit au début le problème persistait mais arès tout allait bien

Bonjour à toi romses, j'ai obtenu le même problème que toi, je n'ai pas su corriger le problème.

MAIS !

J'ai fait une nouvelle base de donnée, et créé toutes mes tables, ensuite j'ai créé toutes mes colonnes avec les contraintes que je souhaitais puis ensuite j'ai commencé à insérer des données et ça à bien fonctionné :)

Super alors !