Ma Table ressources contient toutes les ressources de mon site, et pour permettre aux utilisateurs de les mettre en favoris (sur le site), la table ressource est en relation n:n avec la table membre avec pour intermédiaire la table favoris. Schéma:
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
32
33
34
35
36
37
38
39
40
 
membre: 
 columns: 
  username: 
   type: string(255)
   notnull: true
   unique: true
  password: 
   type: string(255)
   notnull: true
 relations:
  ressource:
      local: ressource_id
      foreign: membre_id
      refClass: favoris
      onDelete: cascade
 
ressources:
  columns:
    ...
    titre:
      type: string(255)
    nature:
      type: enum
      values: ['1','2']
  relations:
    membre:
      local: membre_id
      foreign: ressource_id
      refClass: favoris
      onDelete: cascade
 
favoris:
 columns:
  ressource_id:
   type: integer
   primary: true
  membre_id:
   type: integer
   primary: true
Ainsi sous, l'affichage de la page d'une emission, je place ce lien
<a href="<?php echo url_for('emission/mettreEnFavoris?emission='.$emission->getId()) ?>">Mettre en favoris</a>
Le code de mon action mettreEnFavoris est le suivant:
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
 
  public function executeMettreEnFavoris(sfWebRequest $request)
  {
    $this->forward404Unless($request->getParameter('emission'));
 
	$fav = new favoris();
 
	$this->res = Doctrine::getTable('ressources')->findOneByEmissionId($request->getParameter('emission'));
 
	$this->resId = $this->res->getId();
 
	$fav->setRessourceId($this->resId);
	$fav->setMembreId(1);
	$fav->save();			
  }
(NB: Je ne l'ai pas mis ici mais la table ressource est en relation avec d'autres tables emission et article.)
Et quand cette action est appelée, il renvoie l'erreur que voici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`nortb`.`favoris`, CONSTRAINT `favoris_ressource_id_sf_guard_user_id` FOREIGN KEY (`ressource_id`) REFERENCES `sf_guard_user` (`id`))
(Ouais, la table membre aussi hérite de sfGuardUser par aggrégation de colonne)
Alors, quelques idées pour enregistrer les éléments dans ma table favoris ? Merci de votre aide.