使Yii Dropdown默认值为NULL

时间:2014-06-05 18:58:09

标签: php mysql yii foreign-keys

我在使用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?

2 个答案:

答案 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),
....................
        );
    }