我正在尝试创建一个用户,并且所有值均未插入数据库中。systems_user表与方表有关系,因为party_id是sytems_user的主键。什么都没有插入。甚至没有错误,它只是返回到“创建”页面。这是我的架构:
-- -- Table structure for table `system_users` -- CREATE TABLE IF NOT EXISTS `system_users` ( `party_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(200) NOT NULL, `password` varchar(255) NOT NULL, `date_last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `status` varchar(50) NOT NULL DEFAULT 'Pending for Approval', `date_created` datetime NOT NULL, `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `user_role` varchar(255) NOT NULL, `isLogin` int(1) NOT NULL, PRIMARY KEY (`party_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=221 ; -- -- Constraints for table `system_users` -- ALTER TABLE `system_users` ADD CONSTRAINT `system_users_ibfk_1` FOREIGN KEY (`party_id`) REFERENCES `parties` (`id`); ------------------------------------- -- Table structure for table `parties` -- CREATE TABLE IF NOT EXISTS `parties` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `party_type_id` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `party_type_id` (`party_type_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=200 ; -- -- Constraints for table `parties` -- ALTER TABLE `parties` ADD CONSTRAINT `parties_ibfk_1` FOREIGN KEY (`party_type_id`) REFERENCES `party_types` (`id`);
我哪里出问题了?为什么不插入?
编辑
SystemUser模型的规则:
public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('username, password, date_last_login, date_created, user_role, isLogin', 'required'), array('isLogin', 'numerical', 'integerOnly'=>true), array('username', 'length', 'max'=>200), array('password, user_role', 'length', 'max'=>255), array('status', 'length', 'max'=>50), array('date_modified', 'safe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('party_id, username, password, date_last_login, status, date_created, date_modified, user_role, isLogin', 'safe', 'on'=>'search'), ); }
缔约方规则:
public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('party_type_id', 'required'), array('party_type_id', 'length', 'max'=>10), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, party_type_id', 'safe', 'on'=>'search'), ); }
编辑控制器actionCreate()
一些背景知识: 从下面可以看到,if语句中的条件仅询问是否设置了SystemUsers,因为创建来自SystemUser表单。我的目标是获取system_user的party_id并将其插入“ Parties”表中,该表与我正在使用的SystemUsers模型不同。到目前为止,当我运行此命令时,没有任何反应。
public function actionCreate() { $parties = new Parties; $model= new SystemUsers; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['SystemUsers'])) { $parties->attributes = (HOW can I put the party_id from $model here?); $model->attributes = $_POST['SystemUsers']; $valid = true; $valid &= $parties->validate(); $valid &= $model->validate(); if($valid) { $parties->id = $model->getPrimaryKey(); $parties->save(); /* First save parties. */ $model->save(); } } $this->render('create',array( 'model'=>$model, 'parties'=>$parties, ));
Yii 不会在数据库中插入不安全的值,以前我有这个问题,如果您将所有属性设置为安全,就可以了。您的属性现在仅在search方案('on'=>'search')中是安全的。为了使所有属性在所有情况下均安全,请'on'=>'search'从这两个模型规则中删除 。
Yii
search
'on'=>'search'
您放在$parties->id = $customers->getPrimaryKey(); 之后 $parties->save();。
$parties->id = $customers->getPrimaryKey();
$parties->save();
如果您也想保存$parties->id,请将其放置在save()
$parties->id
save()
redirect
更新 :
那这个呢 ?
if (isset($_POST['SystemUsers'])) { $model->attributes = $_POST['SystemUsers']; if($model->save()){ // save() does validation in itself $parties->id = $model->getPrimaryKey(); $parties->save(); } }