Relation Entre Deux Tables

Bonjour,

Donc voilà j’ai créé se topic pour avoir quelque idée.

J’ai deux table

-La table question

avec dedans


-ID_QUESTION

-NOM_QUESTION  (pour recherche rapide)

-QUESTION

-REPONSE_1

-...

-REPONSE_10 (10 réponse différente possible)

-la table RelationQuestionReponse

avec dedans




-ID_RELATION

-ID_QUESTION (question que l on choisi)

-REPONSE (La réponse choisi)

-ID_QUESTION2  (la question suivante qui apparaîtra quand on répond la réponse choisi)

donc quand je crée une relation l’affichage que je voie (cf ci-dessous)

5645

Capture.PNG

J’aimerai avoir des idée pour deux chose qui modifie cette vue.

Première question:

Le champ NOM_QUESTION (question dans l’image et ID_QUESTION dans la table relation) permet d’avoir une idée de quelle question on traite(sans avoir une trop grosse dropDownList).

Est-il possible d’afficher en fonction de NOM_QUESTION choisi, a coté la vrai question (champ QUESTION)? (je pense a de l’ajax, mais j’ai des souci avec $model qui reconnais pas QUESTION…)

Deuxième question:

Est-il possible toujours en fonction de NOM_QUESTION d’afficher les réponse possibles de la question en dropDownList mais qui me renvoie un chiffre de 1 à 10 (ajax probablement aussi)

Je sais pas si j’ai été compréhensible. Je reste joignable pour plus de précision .

Cordialement Navy

Salut Navy

Première question, si je l’ai bien comprise : afficher le champs NOM_QUESTION à côté de la DDL si on a selectionné

Une idée de comment je ferais :

> donnes un ID à ta DDL

> crées une div vide a côté de ta DDL du style


<div id="nomQuestion"></div>

> Un script du genre :




Yii::app()->clientScript->registerScript('afficheNomQuestion', 

	"$('#maSuperDDL').change(function(){

		jQuery.ajax({

			type: 'POST',

			url: '".Yii::app()->baseUrl."/Controller/Action/id/". $model->idQuestion .',

			success: function(html) { 

				$('#nomQuestion').html(html);

			}

		})

	});",

 CClientScript::POS_READY);



> Dans ton controlleur




public function actionAction ($id) {

  $model = Question::model()->findByPk($id);

  echo $model->nomQuestion;



Question 2 : pas le temps pour le moment, désolé :X

Je t’écris cette réponse rapidement, occupé comme je suis, j’espère néanmoins qu’elle t’aidera.

J’essairais de passer le plus possible pour continuer à aider ^^

Bonne chance !

Merci de ta réponse rapide. Je comprend ^^ Je suis pareil. (Le pourquoi du topic plus trop le temps de faire des recherches…)

Bon pour le texte de la question en partant de ton idée ca fonctionne niquel =).

Maintenant je suis au niveau des réponses…

J’essaye de faire dans l’appel ajax de ID_QUESTION


<?php echo $form->dropDownList($model,'ID_QUESTION',

		CHtml::listData(question::model()->findAll(),'ID_QUESTION', 'NOM_QUESTION'), array('empty'=> "Quelle question?",

		'ajax' => array(

							'type'=>'POST',

							'url' =>CController::createUrl('RelationQuestionReponse/DynamicNOMQUESTION'),

							'data'=>array ('ID_QUESTION'=>'js:this.value'),

							'update'=>'#QUESTION'

							

						)));?>

Dans le contrôler j’essaye de renvoyer un tableau… Mais ca me bloque pas mal…

Si ta une meilleur idée ce serai avec plaisir =)

Salut !

Content que la première question soit réglée.

Je sais pas si c’est bien compris la question, mais il suffirait de l’ajouter dans ton controller :




public function actionAction ($id) {

  $model = Question::model()->findByPk($id);

  $relation = RelationQuestionReponse::model()->findByAttributes( array('idQuestion' => $id) );

  

  $html = $model->nomQuestion;


  $html .= CHtml::dropDownList('reponse', $relation, 

              array(1 => $model->reponse1, 

              2 => $model->reponse2

              /* ..... */

          ));


  echo $html;

}



Je sais pas si ça aide beaucoup, j’espère

Bon, si je peux me permettre, avant de le faire en Ajax, tu peux envoyer toutes les infos dont tu as besoin à ta vue et faire les maj en jquery. Une fois que ça marche bien, tu optimises avec de l’ajax. Ça permet de diviser les problèmes, et d’y voir plus clair.

Pour ton premier problème d’ailleurs, il vaut mieux éviter l’ajax, puisque ça te fait effectuer une seconde requête inutile sur la BDD. Renvoie directement l’ensemble du model $questions vers ta vue.

J’imagine que tu génères ta dropdown avec un foreach($questions as $question), de la même manière, tu n’as qu’à générer des <span id=“question_id” syle=“display:none”><?php echo $question->NOM_QUESTION?></span>. Puis, dans ton code js, sur le $(’#maSuperDDL’).change() , tu remplaces l’appel ajax par $(’#nomQuestion’). empty().append($(’#question_id’)); ça fera beaucoup moins d’allé-retour vers ta BDD.

Pour ton second problème, c’est pareille. Puisque les réponses possibles sont dans la table Questions, elles seront accessibles via $question->REPONSE_1; $question->REPONSE_2; etc.

le fait que tu cherches à obtenir un numéro de réponse plutôt que la valeur du champs réponse est symptomatique d’un défaut de conception de ta base.

Tu devrais avoir une table “Réponses”, avec un champ ID_QUESTION et un champs REPONSE, et un champs ORDER (plus d’autres champs qui te permette de spécifié ta réponse, type date de création, metadata, etc.). ça te permettrait au passage d’avoir le nombre de réponses que tu veux par question (plus ou moins de 10).