我有一个带有输入的表单是可选的,但是如果用户没有填写它,我就无法使表单有效,因为它是一个外键而且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
答案 0 :(得分:1)
我不确定这是否是这种情况,但是对于一对一的关系,如果要将其设置为null,则需要使用Doctrine_Null对象:
$this->setLocataire2(new Doctrine_Null());
该问题可能是由您使用的输入而非选择引起的。
答案 1 :(得分:0)
我通过使用方法processValues()(通过save()调用)将属性设置为NULL来解决问题。