Bonjour à tous,

Je suis sur Symfony 1.4 et Doctrine.

J'ai un formulaire assez complexe qui fait appel à plusieurs sous formulaires.
Le formulaire général permet d'enregistrer un bien immobilier et ses caractéristiques.

Le problème se situe sur la notion de propriétaire, d'après les exigences du client, un bien peut avoir un ou 2 propriétaire(s).

J'ai donc un formulaire de base qui contient un sous-formulaire pour le 1er propriétaire et un bouton "Ajouter un 2ème propriétaire" qui fait un appel ajax pour rajouter à la page un nouveau sous-formulaire de type propriétaire.

L'ensemble fonctionne plutôt bien, sauf dans un cas, quand je saisie uniquement un seul propriétaire, je retrouve quand même dans la table bien immobilier la clé étrangère "proprietaire_id_2" qui est remplie, et une ligne vide dans la table propriétaire correspondant à ce 2ème propriétaire.
Alors que justement le but du bouton "ajouter un 2ème proprietaire" c'est de ne pas charger la base de proprietaire n°2 tous vides !

J'ai essayé de manipuler le schema.yml et les class.php mais sans succès, je ne vois vraiment pas comment faire...

Je sais pas si mon message est clair, n'hésitez pas à me demander des précisions ou des poritions de code si nécessaire.

Merci pour vos lumières !

Voici la partie de mon schema yml qui concerne ces tables "cedant" (=bien immobilier) et proprietaire :

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
Cedant:
  actAs:
      Timestampable: ~
      Sluggable:
        fields:       [titre]
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    titre:
      type: string(100)
      notnull: true
    reference:
      type: string(10)
    description:
      type: string(3000)
    modalite:
      type: string(254)
    logement:
      type: boolean
      default: 0
    prix:
      type: string(100)
    secteur_act_id:
      type: integer
    secteur_act_2_id:
      type: integer
    type_ent_id:
      type: integer
    origine_contact_id:
      type: integer
    antenne_id:
      type: integer
    secteur_geo_id:
      type: integer
    commune_id:
      type: integer
    visible_site_web:
      type: boolean
      default: true
    date_sortie:
      type: timestamp
    sortie_positive:
      type: boolean
      default: false
    type_cession_id:
      type: integer
    commentaire_cession:
      type: string(3000)
    proprietaire_id:
      type: integer
    proprietaire_2_id:
      type: integer
    photo:
      type: string(255)
    visible_photo:
      type: boolean
      default: 0
    user_id:
      type: integer
  relations:
    Antenne:
      local: antenne_id
      foreign: id
      onDelete: CASCADE
    SecteurGeo:
      local: secteur_geo_id
      foreign: id
      onDelete: CASCADE
    Activite1:
      class: SecteurAct
      local: secteur_act_id
      foreign: id
      onDelete: CASCADE
    Activite2:
      class: SecteurAct
      local: secteur_act_2_id
      foreign: id
      onDelete: CASCADE
    TypeEntreprise:
      local: type_ent_id
      foreign: id
      onDelete: CASCADE
    OrigineContact:
      local: origine_contact_id
      foreign: id
      onDelete: CASCADE
    Commune:
      local: commune_id
      foreign: id
      onDelete: CASCADE
    TypeCession:
      local: type_cession_id
      foreign: id
      onDelete: CASCADE
    Proprietaire1:
      class: Proprietaire
      local: proprietaire_id
      foreign: id
      foreignAlias: Proprietaire1
      type: one
      onDelete: CASCADE
    Proprietaire2:
      class: Proprietaire
      local: proprietaire_2_id
      foreign: id
      foreignAlias: Proprietaire2
      onDelete: CASCADE
 
 
Proprietaire:
  actAs: [Timestampable]
  columns:
    id:
      type: integer
      primary: true
      autoincrement: true
    nom:
      type: string(100)
    prenom:
      type: string(100)
    sexe_id:
      type: integer
    date_naiss:
      type: timestamp
    adresse1:
      type: string(200)
    adresse2:
      type: string(200)
    commune_id:
      type: integer
    tel:
      type: string(15)
    portable:
      type: string(15)
    email:
      type: string(100)
    situation_matrimoniale_id:
      type: integer
    regime_marital_id:
      type: integer
    nb_enfant:
      type: integer
    age_enfant:
      type: string(200)
    nb_pers_charge:
      type: integer
    situation_prof_id:
      type: integer
    personne_hand:
      type: boolean
      default: 0
    benef_minima:
      type: boolean
      default: 0
    formation_txt:
      type: string(1000)
    formation_id:
      type: integer
    categ_socio_id:
      type: integer
  relations:
    Commune:
      local: commune_id
      foreign: id
      onDelete: CASCADE
    SituationMatrimoniale:
      local: situation_matrimoniale_id
      foreign: id
      onDelete: CASCADE
    RegimeMarital:
      local: regime_marital_id
      foreign: id
      onDelete: CASCADE
    SituationProf:
      local: situation_prof_id
      foreign: id
      onDelete: CASCADE
    CategSocio:
      local: categ_socio_id
      foreign: id
      onDelete: CASCADE
    Formation:
      local: formation_id
      foreign: id
      onDelete: CASCADE
    Sexe:
      local: sexe_id
      foreign: id
      onDelete: CASCADE
cli16 --*