Yii模型保存时出现外键错误

时间:2015-10-15 10:57:58

标签: php mysql yii

我有以下表格:

user
- id (PK)
- ...

autoresponder
- id (PK)
- ...

user_autoresponder
- user_id (PK, FK to user.id)
- autoresponder_id (PK, FK to autoresponder.id)

在AutoresponderController中我有

public function actionCreate()
{
    $model = new Autoresponder;

    if(isset($_POST['Autoresponder']))
    {
        $model->attributes=$_POST['Autoresponder'];

        if($model->save()) {
            UserAutoresponder::assignToUsers($model);
            $this->redirect(array('myadmin', 'cid'=>$model->category_id));
        }
    }

    $this->render('create',array(
        'model'=>$model,
    ));
}

在UserAutoresponder模型中我有:

public static function assignToUsers($autoresponder)
{
    $users = Yii::app()->db->createCommand()
        ->select('id')
        ->from(User::tableName())
        ->where('account_status > 0')
        ->queryAll();

    foreach ($users as $user) {

        $ua = UserAutoresponder::model()->findByPk(array(
                                            'user_id'=>$user['id'],
                                            'autoresponder_id'=>$autoresponder->id
                                        ));

        if (!$ua) {
                $t = new UserAutoresponder;
                $t->user_id = $user['id'];
                $t->autoresponder_id = $autoresponder->id;
                $t->save();
        }
    }
}

当我去创建一个自动回复时,它出错了:

  

完整性约束违规:1452无法添加或更新子行:   外键约束失败   (lead-managercrm_user_autoresponder,CONSTRAINT   crm_user_autoresponder_ibfk_2外键(autoresponder_id)   参考crm_autoresponderid)ON更新CASCADE ON UPDATE   CASCADE)

鉴于已经创建了自动回复并且已经为其分配了一个ID,我正在使用user表中已有的用户列表,而且我也是检查记录是否存在查询失败的原因?

这适用于我的本地计算机和测试服务器,但不能正常运行。

1 个答案:

答案 0 :(得分:0)

autoresponder_id 的约束失败。 检查生产环境中的 $ autoresponder-> id 值:它可能为null。如果是这种情况,那么您的生产数据库不适合您的开发/测试数据库。也许在 autoresponder 表上没有激活PK的自动增量?