0

新しいレコードを追加するとエラーが発生します:

1452 子行を追加または更新できません: 外部キー制約が失敗しました

public function relations()
{
    return array(
        'data' => array(self::HAS_ONE, 'Data', 'id'),
    );
}

新しいレコードを追加するための私のコードは次のとおりです。

public function actionAdd_Record()
{
    $users = new Users();
    $data = new Data();


    if (isset($_POST['Users']) && isset($_POST['Data'])) {

        if(!empty($_POST['Users_password'])) $_POST['Users']['password']=md5($_POST['Users_password']);
         $users->created_date=date('Y-m-d H:i:s');


        CActiveForm::validate(array($users, $data));
        $users->attributes = $_POST['Users'];
        $data->attributes = $_POST['Data'];

        $valid=$users->validate();
        $valid=$data->validate() && $valid;


        if($valid){
            $users->save();
            $data->save();

            $this->redirect(
                array('view_record',
                    'id'=> $users->id)
            );
        }
    }

    $this->render(
        'add_record', array(
            'users'=> $users,
            'data'=>$data
        )
    );
}

最初の表は次のとおりです。

    CREATE TABLE IF NOT EXISTS `data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `investment_amount` float DEFAULT '0' COMMENT '投資額',
  `withdrawals` float DEFAULT '0' COMMENT '引出額',
  `investment_yield` float DEFAULT '0' COMMENT '運用利回り',
  `account_balance` float DEFAULT '0' COMMENT '口座残高',
  `status_account` enum('open','closed') DEFAULT 'open',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

そして2番目のテーブル:

    CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(128) NOT NULL,
  `password` varchar(128) NOT NULL,
  `name` varchar(300) NOT NULL COMMENT '氏名',
  `email` varchar(200) NOT NULL,
  `user_type` enum('normal','admin') NOT NULL DEFAULT 'normal',
  `created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

そして、このエラーが発生します:

CDbCommand は SQL ステートメントの実行に失敗しました: SQLSTATE[23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました ( money_investment. data, CONSTRAINT FK_data_usersFOREIGN KEY ( id) REFERENCES users( id))。実行された SQL ステートメント: INSERT INTO data( investment_amount, withdrawals, investment_yield, account_balance, status_account) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4)

4

4 に答える 4

1

これはyiiやPHPの問題ではなく、データベースの問題です。

主キーに関して定義した関係に違反するレコードを挿入しようとしています。チェックするのは、関係とフィールドの長さです。

存在しない列にまだ関係が定義されているようです(money_investment?)

于 2012-09-14T15:47:23.503 に答える
1

助けてくれてありがとう、私は私の問題を解決しました。

$data->id=$users->id;2番目のテーブルにはIDがわからなかったので追加しました。ここを参照してください。

if($valid){
$users->save();
$data->id=$users->id;
$data->save();


$this->redirect(
    array('view_record',
        'id'=> $users->id)
    );
}
于 2012-09-14T16:48:35.703 に答える
0

外部キー制約により、親の前に子にデータを入力することはできません..時々SQLエンジンinnoDbとMyIsam..その機能を読んで、外部キー制約の今後の問題の下でどのSQLエンジンを使用するのが好ましいかを知るようになります... .

于 2015-09-01T11:26:03.243 に答える
0

あなたはきっとあなたのテーブルを更新します。最善の方法は、モデルで見ることです

public function relations()

これらの関係をテーブルと比較します。関係を追加したり間違ったりすると、このような問題が発生する可能性があります。

于 2016-05-27T06:59:10.197 に答える