2

I'm trying to create a user and all the values are not inserting into the database. The systems_user table has a relation to a parties table as the party_id is the primary key of the sytems_user. Nothing is being inserted. Not even an error, it just goes back to the "create" page. Here is my schema:

--
-- 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`);

Where have I gone wrong? Why is it not inserting?

EDIT

Rules for SystemUser Model:

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'),
    );
}

Rules for Parties:

 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'),
    );
}

EDIT Controller actionCreate()

A little background: as you can see from below, the conditions inside the if statement is only asking if the SystemUsers is set because the create come from the SystemUser form. My goal is to get the party_id of the system_user and insert it into the Parties table which is a different model from the SystemUsers that i'm using. So far when I run this, nothing happens.

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, 
    ));
6
  • post your model's rule method Commented Jan 29, 2014 at 6:07
  • party_id is auto increment and PK for system users and below you're referring it as foregin key...?? it is contradiction. change you PK name and then refer your party_id column as foreign key Commented Jan 29, 2014 at 6:09
  • @AlirezaFallah I have edited my answer as per your request. Commented Jan 29, 2014 at 6:14
  • why do you want to save parties first? Commented Jan 29, 2014 at 7:16
  • I saved it first because it was the foreign item. I only save the model after it has saved the pk retrieved from the model. Commented Jan 29, 2014 at 7:19

1 Answer 1

1
  1. Yii doesn't insert not-safe values in database, I had this problem before, if you make all attributes safe, you will be fine. your attributes now are safe only in search scenario ( 'on'=>'search' ) . for making all attributes safe in all scenarios, remove 'on'=>'search' from both model rules.

  2. You placed $parties->id = $customers->getPrimaryKey(); after $parties->save();.

    if you want to save $parties->id too, place it before save()

  3. Remove redirect line, I think your save() method cannot show errors because of that.


update :

What about this ?

if (isset($_POST['SystemUsers'])) {
    $model->attributes = $_POST['SystemUsers'];
    if($model->save()){  // save() does validation in itself
        $parties->id = $model->getPrimaryKey();
        $parties->save();
    }
}
Sign up to request clarification or add additional context in comments.

9 Comments

This didn't do anything. I was actually hoping that my Controller had the issue.
did you removed 'on'=>'search' in SystemUser model too ?
Took that out too. I don't understand how that will fix my problem. Aren't those rules for search? I'm not trying to do a search, I'm trying to do a 'create'. I'm not saying I don't appreciate your answers, but can you explain the reason why you're telling me to remove the 'on'=>'search'?
yes, you have to make the attributes safe, in all scenarios, removing that part, will do that
Okay, I see your explanation. I'll try altering a few things.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.