我在使用CActiveForm-> dropDownList创建的Yii表单中有一个下拉列表。
我正在使用数组('empty'=>'请选择一个')作为在未选择任何内容时设置值的方法。
该字段被约束到另一个表,但它被设置为允许NULL。当Yii显示MySQL错误时,它会说:
integrity constraint violation: 1452 Cannot add or update a child row: a foreign
key constraint fails (`imi_sales`.`ss_project`, CONSTRAINT
`fk_project_product_type` FOREIGN KEY (`product_type_id`) REFERENCES
`ss_product_type` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
它还显示插入ss_project.product_type_id的值为''。如果我复制SQL并将其更改为NULL,它就可以工作。如何让Yii将其设置为NULL?
答案 0 :(得分:2)
将以下代码添加到beforeSave()
方法中:
public function beforeSave(){
if(parent::beforeSave()){
if(empty($this->product_type_id)) {$this->product_type_id=NULL;}
return true;
}
}
这样,您在保存新记录之前告诉Yii,检查product_type_id
值是否为空(''
)。如果是,请将其设置为NULL
。
答案 1 :(得分:2)
选择的答案有效,但我相信这更优雅。
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
....................
array('product_type_id', 'default', 'setOnEmpty' => true, 'value' => null),
....................
);
}