Yii Framework Forum: Operation crud sur table intermedière - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Operation crud sur table intermedière Rate Topic: -----

#1 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 06 December 2010 - 10:45 AM

Posted Image

Soit cette base de donnée; comment arrivez vous à faire des opérations crud sur la table employe_mission?
Impossible de le générer ni avec le génération gii ni avec le lignes d commande shell.

merci pour votre aide
Posted Image
0

#2 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 643
  • Joined: 29-November 08
  • Location:Paris, France

Posted 06 December 2010 - 12:20 PM

Salut Fouss,
hélas les clef composites ne sont pas gérées par le CRUD ... donc faut y aller à la main.
Posted Image
0

#3 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 07 December 2010 - 02:49 AM

View PostRaoul, on 06 December 2010 - 12:20 PM, said:

Salut Fouss,
hélas les clef composites ne sont pas gérées par le CRUD ... donc faut y aller à la main.
Posted Image


Hmmm! C'est donc possible à la main? Comment faire?
Posted Image
0

#4 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 643
  • Joined: 29-November 08
  • Location:Paris, France

Posted 07 December 2010 - 03:55 AM

...Et bien admettons que tu aies plusieurs colonnes dans ta table employee_misson (parce que sinon, en l'état, il n'y pas d'interêt à faire un crud). Ce que je ferai c'est de momentanément changer la table, et ne lui donner qu'une seule clef primaire.
Ensuite je lance le CRUD qui me genère toutes les classes nécessaires et enfin je restaure la structure d'origine (avec la clef composite). J'ai mes vues, mon contrôleur, mon modèle .... et c'est maintenant que commence le travail "à la main". Et oui, parce que bien sûr il faut repasser tout le code généré et le modifier pour qu'il fonctionne avec la clef (idemployee,idmission).

Ok, c'est peut-être un peu primitif ;) ... mais je ne vois pas comment faire autrement.
8)
0

#5 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 07 December 2010 - 06:03 AM

View PostRaoul, on 07 December 2010 - 03:55 AM, said:

...Et bien admettons que tu aies plusieurs colonnes dans ta table employee_misson (parce que sinon, en l'état, il n'y pas d'interêt à faire un crud). Ce que je ferai c'est de momentanément changer la table, et ne lui donner qu'une seule clef primaire.
Ensuite je lance le CRUD qui me genère toutes les classes nécessaires et enfin je restaure la structure d'origine (avec la clef composite). J'ai mes vues, mon contrôleur, mon modèle .... et c'est maintenant que commence le travail "à la main". Et oui, parce que bien sûr il faut repasser tout le code généré et le modifier pour qu'il fonctionne avec la clef (idemployee,idmission).

Ok, c'est peut-être un peu primitif ;) ... mais je ne vois pas comment faire autrement.
8)


Je veux comprendre. j'ai idemploye et idmission; n'est ce pas déjà plusieurs colonnes?
merci de m'éclaircir....
Posted Image
0

#6 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 643
  • Joined: 29-November 08
  • Location:Paris, France

Posted 07 December 2010 - 07:18 AM

oui, tu as raison, mais bon, pour moi le GRUD généré par Gii m'aide en particulier pour créer les formulaires dans le cas où j'ai un grand nombre de colonnes dans ma table. Idem pour les modèles. C'est pour cela que dans le cas d'une table simple comme la tienne, et qui ne sert qu'à établier la lisaison MANY_MANY entre employee et mission, je ne suis pas sûr qu'un CRUD sur cette table soit utile.

Si par exemple la table employee_misson avait une colonne date (date à laquelle une mission a été attributée à un employé), assigner (nom de la personne ayant assigné la mission à l'employé),status ('état d'avancement de la mission pour un employé donnée), etc .... dans ce cas, un petit coup de Gii et hop, tu as ton modèle, tes vues, ton controleur ...après vient le travail d'adaptation à une clef composite. Mais si la table reste tout simple, alors il n'y a pas vraiment besoin d'utiliser Gii, toutes les opérations peuvent se faire depuis la vue employee ou mission.

J'espère avoir été un peu plus clair....

Posted Image
0

#7 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 07 December 2010 - 08:43 AM

View PostRaoul, on 07 December 2010 - 07:18 AM, said:

oui, tu as raison, mais bon, pour moi le GRUD généré par Gii m'aide en particulier pour créer les formulaires dans le cas où j'ai un grand nombre de colonnes dans ma table. Idem pour les modèles. C'est pour cela que dans le cas d'une table simple comme la tienne, et qui ne sert qu'à établier la lisaison MANY_MANY entre employee et mission, je ne suis pas sûr qu'un CRUD sur cette table soit utile.

Si par exemple la table employee_misson avait une colonne date (date à laquelle une mission a été attributée à un employé), assigner (nom de la personne ayant assigné la mission à l'employé),status ('état d'avancement de la mission pour un employé donnée), etc .... dans ce cas, un petit coup de Gii et hop, tu as ton modèle, tes vues, ton controleur ...après vient le travail d'adaptation à une clef composite. Mais si la table reste tout simple, alors il n'y a pas vraiment besoin d'utiliser Gii, toutes les opérations peuvent se faire depuis la vue employee ou mission.

J'espère avoir été un peu plus clair....

Posted Image


Merci Raoul
Tout ce que tu me dis m'aide beacoups à comprendre Yii.
Je fais l'état des choses: j'ai mes models employe, mission et employe_mission.
J'ai aussi générer les crud pour employe et mission.
Maintenant si je comprends je vais mettre les données de la table employe_mission en étant dans les vues employe ou mission.
Maintenant comment est ce que à partir de ces vues générer par Yii on peut mettre ou enlever des données dans la table employe_misson?
Je suis un peu embetant mais il me faut cela pour mieux comprendre le ce framework.
Merci une fois de plus
Posted Image
0

#8 User is offline   Raoul 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 643
  • Joined: 29-November 08
  • Location:Paris, France

Posted 07 December 2010 - 02:58 PM

pas de souci, tu n'es pas embêtant... et je ne suis pas expert, on fait juste ce qu'on peut ;)


Arbitrairement je vais supposer que l'assignation d'une mission à un employé se fait depuis la vue 'mission' (mais on pourrait faire l'inverse ou même les deux).

1.l'affichage de la mission.
Une mission est composée d'attributs spécifiques (son nom, sa description,etc...) et d'une liste d'employées qui lui sont assignés (la liste peut être vide)
Modifier :
protected/controllers/MissionController.php - methode : actionShow() - la requête doit retourner la mission, ainsi que tous les employés qui lui sont assignés. Pour cela, tu peux utiliser les 'relations' crées automatiquement par Gii. Dans le modèle Mission, la méthode Relations() devrait dans ton cas être :

	public function relations()
	{
		return array(
			'employe_mission' => array(self::HAS_MANY, 'EmployeMission', 'idemploye'),
			'employees' => array(self::MANY_MANY, 'Employe', 'employe_mission(idemploye,idmission)'),

		);
	}



protected/views/mission/show.php - tu peux donc utiliser la relation 'employees' pour récupérer tous les employés assignés à une mission
Je vais pas plus dans le détail car c'est un très vaste sujet.

2. création de la mission.
Là on change rien. On va établir comme régle qu'il n'est pas possible de créer une mission et de lui assigner des employées en une seule opération, il faudra faire ça en deux fois 1) créer la mission 2) assigner à un employé (ça simplifie)

3. assignation à un employé
Tu peux par exemple rajouter un lien 'assigner à un employé' dans le formulaire.
Modifier : protected/views/mission/show.php (attention, le lien ne doit apparaître qu'en mode 'update', et pas en mode 'create'. Par exemple :

<?php if( $update ):?>
	<?php echo CHtml::link('assigner à un employé',array('assign')); ?>
<?php endif; ?>



A partir de là, on n'est plus dans la modification, mais bien dans la création 'à la main'. Il faut donc créer la vue protected/views/mission/assign.php qui contiendra le formulaire d'assignation. Celui-ci peut être très simple et proposer par exemple une liste de tous les employées qui ne sont pas déjà assignés à cette tâche. Pour traiter ce formulaire, il faut enfin rajouter une action dans le controleur MissionController.

Bon, je te passe les détails du code et j'espère que ça t'aura aidé. En fait, la mise en place dépend de ce que tu souhaites afficher à l'utilisateur et du mode opératoire que tu veux proposer.Dans mon exemple j'ai pris quelques décisions afin de pouvoir illustrer le principe général....
Courage
8)

ps: le code contient peut-être des erreurs vu que je l'ai écrit de tête sans pouvoir le tester ....
0

#9 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 08 December 2010 - 03:49 AM

Je vais lire tout cela tranquillement et te faire un compte rendu

thanks!
Posted Image
0

#10 User is offline   fouss 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 385
  • Joined: 05-October 10
  • Location:Bamako Mali

Posted 13 December 2010 - 07:06 AM

Bonjour,
après de longues recherches voila ce que j'ai fais dans MissionController.php

Quote

public function actionShow()
{
$missions = Mission::model()->findAll();
$lmission=array();
foreach($missions as $mission){
foreach($mission->employeids as $me)
{
$lmission[]=$me->nom.' '.$mission->objet.'</br>';

} }
$this->render('show',array('missions'=>$lmission,));

}

et ma vue show.php contient

Quote

<?php
print_r($missions);
?>


Cela m'affiche la liste des employés ayant participé à une mission de cette manière

Quote

Array ( [0] => Employe1 Mission1
[1] => Employe2 Mission1
[2] => Employe1 Mission2
[3] =>Employe1 Mission2
)

Ce qui est logiquement bien mais j voudrais affiche cela avec un CGridView mais cmment faire?

Voila pour le 1er point où j'en suis pour le reste je creuse toujrs la tête (ça viendra peut être :D)
Posted Image
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users