由于数据库中的关系,插入数据库不起作用

时间:2014-01-29 04:02:27

标签: php mysql yii

每当用户注册时,我一直在尝试插入数据库,但我总是遇到SQL [23000]错误,我意识到在我的数据库中,存在与不同表的关系,这就是为什么我收到了一个错误。我习惯于通过Gii创建模型和crud,但这是我第一次因为表之间的关系而遇到错误。我认为问题是我需要能够插入两个模型,我不能完全确定我应该怎么做。

首先,我将展示我的架构:

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=219 ;

--
-- Constraints for dumped tables
--

--
-- Constraints for table `system_users`
--
ALTER TABLE `system_users`
  ADD CONSTRAINT `system_users_ibfk_1` FOREIGN KEY (`party_id`) REFERENCES `parties` (`id`);

 ---------------------------------------
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 dumped tables
--

--
-- Constraints for table `parties`
--
ALTER TABLE `parties`
  ADD CONSTRAINT `parties_ibfk_1` FOREIGN KEY (`party_type_id`) REFERENCES `party_types` (`id`);

在此之后,我使用Gii生成了一个模型,并将其称为SystemUsers.php,我还在查看的systemUsers中生成了crud。

现在的问题是,每当我选择“创建”时,它都会抛出一个错误,它无法以某种方式找到各方ID。

以防万一,这是我的模型SystemUsers.php的代码:

<?php

class SystemUsers extends CActiveRecord
 {
/**
 * Returns the static model of the specified AR class.
 * @param string $className active record class name.
 * @return SystemUsers the static model class
 */
public static function model($className=__CLASS__)
{
    return parent::model($className);
}

/**
 * @return string the associated database table name
 */
public function tableName()
{
    return 'system_users';
}

/**
 * @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('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'),
    );
}

/**
 * @return array relational rules.
 */
public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'party_id' => array(self::BELONGS_TO, 'system_users', 'party_id'),
        'party_id' => array(self::HAS_ONE, 'parties', 'id'),

    );
}

/**
 * @return array customized attribute labels (name=>label)
 */
public function attributeLabels()
{
    return array(
        'party_id' => 'Party',
        'username' => 'Username',
        'password' => 'Password',
        'date_last_login' => 'Date Last Login',
        'status' => 'Status',
        'date_created' => 'Date Created',
        'date_modified' => 'Date Modified',
        'user_role' => 'User Role',
        'isLogin' => 'Is Login',
    );
}

/**
 * Retrieves a list of models based on the current search/filter conditions.
 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
 */
public function search()
{
    // Warning: Please modify the following code to remove attributes that
    // should not be searched.

    $criteria=new CDbCriteria;

    $criteria->compare('party_id',$this->party_id,true);
    $criteria->compare('username',$this->username,true);
    $criteria->compare('password',$this->password,true);
    $criteria->compare('date_last_login',$this->date_last_login,true);
    $criteria->compare('status',$this->status,true);
    $criteria->compare('date_created',$this->date_created,true);
    $criteria->compare('date_modified',$this->date_modified,true);
    $criteria->compare('user_role',$this->user_role,true);
    $criteria->compare('isLogin',$this->isLogin);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}
}

2 个答案:

答案 0 :(得分:1)

你必须实现一个多步形式和一个单一的脂肪控制器,它可以为你工作,例如添加/更新所有三个实体。请参阅此thread

答案 1 :(得分:0)

因为你有外键约束,那么你在父表中有条目

system_users -> depends on parties
 and 
parties -> depends on party_types

所以要在 system_user 中插入记录,您必须在 Parites 中有记录,并且类似地在各方中插入记录,您必须拥有记录在 party_types

首先在 party_type 中插入记录,然后在 party 中创建该party_type创建记录,然后为 party_id 创建中的记录> SYSTEM_USER