2010-11-29 8 views
0

J'ai un formulaire avec une entrée qui est optionnelle mais je ne peux pas valider le formulaire si l'utilisateur ne le remplit pas car c'est une clé étrangère et Doctrine me montre une erreur.Comment définir une clé étrangère sur null? (symfony)

SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails (`logements`.`bail`, CONSTRAINT `bail_ibfk_3` FOREIGN KEY (`locataire2`) REFERENCES `locataire` (`nud`) ON DELETE CASCADE ON UPDATE CASCADE) 

J'ai essayé dans phpMyAdmin la même demande et il fonctionne correctement: je peux définir la clé étrangère null. Donc, comment puis-je définir la clé étrangère sur null et valider le formulaire sans erreur de Doctrine?

EDIT

Bail: 
    connection: doctrine 
    tableName: bail 
    columns: 
    id: 
     type: integer(2) 
     fixed: false 
     unsigned: true 
     primary: true 
     autoincrement: true 
    locataire1: 
     type: string(20) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    locataire2: 
     type: string(20) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    logement: 
     type: integer(2) 
     fixed: false 
     unsigned: true 
     primary: false 
     notnull: false 
     autoincrement: false 
    datedeb: 
     type: date(25) 
     fixed: false 
     unsigned: false 
     primary: false 
     notnull: false 
     autoincrement: false 
    datefin: 
     type: date(25) 
     fixed: false 
     unsigned: false 
     primary: false 
     default: '0000-00-00' 
     notnull: false 
     autoincrement: false 
    colloc: 
     type: integer(4) 
     fixed: false 
     unsigned: false 
     primary: false 
     default: '0' 
     notnull: false 
     autoincrement: false 
    bailglissant: 
     type: string(12) 
     fixed: false 
     unsigned: false 
     primary: false 
     default: 'Non spécifié' 
     notnull: false 
     autoincrement: false 
    relations: 
    Locataire: 
     local: locataire1 
     foreign: nud 
     type: one 
    Logement: 
     local: logement 
     foreign: id 
     type: one 
    Locataire_3: 
     class: Locataire 
     local: locataire2 
     foreign: nud 
     type: one 
+1

Pourriez-vous s'il vous plaît coller votre définition de schéma et un formulaire? Si votre champ est réellement défini comme facultatif, vous ne devriez pas recevoir ce message. L'erreur provient de la base de données, il semble donc que la doctrine essaie d'y mettre un '0'. –

+0

Le widget de ma forme est "locataire2" – Elorfin

Répondre

0

J'ai résolu le problème en utilisant la méthode processValues ​​() (call by save()) pour définir des attributs sur NULL.

1

Je ne suis pas sûr que ce soit le cas ici, mais pour une des relations individuelles, vous devez utiliser l'objet Doctrine_Null si vous voulez le mettre à null:

$this->setLocataire2(new Doctrine_Null()); 

Ce problème peut être dû à une entrée que vous utilisez au lieu de sélectionner.

+1

Ça ne marche pas mais merci pour cet objet que je ne connaissais pas – Elorfin

Questions connexes