Bon, le titre n'est pas très clair, alors je m'explique un peu
Voici mon schéma (très simplifié)
J'ai fais un unset sur les champs non utilisés de mon formulaire abonnement
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
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 Abonnements: connection: doctrine tableName: abonnements columns: abonnement_id: type: integer(4) fixed: false unsigned: true primary: true autoincrement: true abonnement_commande_id: type: integer(4) fixed: false unsigned: true primary: false notnull: false autoincrement: false abonnement_creation_date: type: timestamp(25) fixed: false unsigned: false primary: false notnull: true autoincrement: false abonnement_last_update: type: timestamp(25) fixed: false unsigned: false primary: false default: '0000-00-00 00:00:00' notnull: true autoincrement: false abonnement_credit: type: integer(4) fixed: false unsigned: true primary: false default: '0' notnull: true autoincrement: false abonnement_statut: type: enum(9) fixed: false unsigned: false values: - PAYEMENT A LA RECEPTION - ACCOMPTE - PAYE - NON PAYE primary: false default: 'PAYEMENT A LA RECEPTION' notnull: true relations: Commandes: local: abonnement_id foreign: commande_abonnement_id type: many Commandes: connection: doctrine tableName: commandes columns: commande_id: type: integer(4) fixed: false unsigned: false primary: true autoincrement: true commande_date: type: timestamp(25) fixed: false unsigned: false default: NOW() primary: false notnull: true autoincrement: false commande_abonnement_id: type: integer(4) fixed: false unsigned: true primary: false notnull: false autoincrement: false relations: Abonnements: local: commande_abonnement_id foreign: abonnement_id type: one
Dans mon commandeForm j'avais placé ceci:
Un abonnement peut être lié à plusieurs commandes.
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 $this->embedRelations(array( 'Abonnement' => array( 'considerNewFormEmptyFields' => array('abonnement_credit', 'abonnement_statut'), 'noNewForm' => false, 'newFormLabel' => '<br /><i>Abonnement</i>', 'newFormClassArgs' => array(array('sf_user' => $this->getOption('sf_user'))), 'displayEmptyRelations' => true, 'formClassArgs' => array(array('ah_add_delete_checkbox' => false)), 'newFormAfterExistingRelations' => true, 'formFormatter' => null, 'multipleNewForms' => false, 'newFormsInitialCount' => 1, 'newFormsContainerForm' => null, // pass BaseForm object here or we will create ahNewRelationsContainerForm 'newRelationButtonLabel' => '+', 'newRelationAddByCloning' => true, 'newRelationUseJSFramework' => 'jQuery', 'customEmbeddedFormLabelMethod' => 'getLabelTitle', ) ));
Dans la table abonnement, j'ai un champ abonnement_commande_id
Ce champ n'est pas vraiment nécessaire dans la relation, il permet simplement de lier l'abonnement à une commande de "référence". J'ai effacé la relation de mon schéma en me demandant si le problème venait de là, mais il semblerait que non
Pour résumer, un abonnement possède une commande de référence et plusieurs commandes peuvent se référer à cet abonnement (en fait, ces commandes seront insérées automatiquement, en prenant pour modèle la commande référencée dans l'abonnement)
J'aimerais pouvoir intégrer le formulaire d'abonnement dans le formulaire de création de commande (un formulaire simple, pas un formulaire de l'admin autogénéré). Et c'est là que ça pose problème, car doctrine ne reconnait pas le lien dans ce sens (je pense).
J'ai déjà fais des formulaire imbriqué (avec ahDoctrineEasyEmbeddedRelationsPlugin) , mais dans l'autre sens, c'est à dire que dans le cas présent il faudrait inclure le formulaire commande dans le formulaire abonnement.... ce qui ne me va pas du tout.
donc je dois faire un formulaire imbriqué dans le sens n ==> 1 à la place de le faire dans le sens 1 ==> n
Auriez vous une idée?
Merci d'avance
Partager