如何将外键设置为null? (symfony的)

时间:2010-11-29 16:59:11

标签: forms symfony1 doctrine foreign-keys

我有一个带有输入的表单是可选的,但是如果用户没有填写它,我就无法使表单有效,因为它是一个外键而且Doctrine显示错误。

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)

我在phpMyAdmin中尝试了相同的请求并且它正常工作:我可以将外键设置为null。

那么,如何将外键设置为null并使表单没有Doctrine错误?

修改

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

2 个答案:

答案 0 :(得分:1)

我不确定这是否是这种情况,但是对于一对一的关系,如果要将其设置为null,则需要使用Doctrine_Null对象:

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

该问题可能是由您使用的输入而非选择引起的。

答案 1 :(得分:0)

我通过使用方法processValues()(通过save()调用)将属性设置为NULL来解决问题。