Сохранение связных данных

Здравствуйте, подскажите как сохранить связные данные?

Вот например имется три Таблица Пользователей и например таблица об образовании (ведь их может быть несколько)

Вопрос как сохранить данные из формы Пользователя в теблицу образование_пользователя




class User extends CActiveRecord{

        ......

        /*Образование*/

	public $education_type = null;

	public $education_place = null;

	public $education_date_end = null;

        .......


        protected function afterSave(){


		parent::afterSave();

                $education = new UserEducation

                $education->type   = $this->education_type;

                ... и так все свойства

                $education->save()

  		

	}

}



Проблема в том что он не сохраняет в таблицу образования :(

  • еще пролема в том не знаю как сюда добавить множественные поля в виде :(

ну что б образований несколько ввести

Нашел вот такое расширение, esaverelatedbehavior

Но вот в какую функцию подставлять


$author->posts = array(

   array(

       'title' => 'My first post',

       'content' => 'This is my first post.'

   ),

   array(

       'title' => 'My second post',

       'content' => 'This is my second post.'

   )

);

$author->saveWithRelated('posts');



Тоже не очень ясно :( если в afterSave то почему то тоже не пашет :(

Есть такая статья

или ещё почитай данную статью, но тут придется передать модель Пользователь_образование

Спасибо.

Да я и ошибку нашел в другом :(

Даже обидно :(

Так и не получается сделать не пойму в чем подвох :(

Как вот Создать и обновить множественные поля :(

в еще и из других таблиц

вот пока рассмотрю Update:


public function actionUpdate($id) {

		if (Yii::app()->user->checkAccess('User.Update')) {

			$post = new Post;

			$model = $this->loadModel($id);

			$model->birthday = DateHelper::getFormatedDate($model->birthday);

			$model->pass_date_of_issue = DateHelper::getFormatedDate($model->pass_date_of_issue);

			//$model->description = $model->role->description;

			$model->setScenario('update');


			// Uncomment the following line if AJAX validation is needed

			$this->performAjaxValidation($model);

			if(Yii::app()->request->isAjaxRequest){

			//if (isset($_POST['ajax']) && $_POST['ajax'] === 'horizontalForm') {

				echo CActiveForm::validate($model);

				Yii::app()->end();

			}




			if (isset($_POST['User'])) {

				$model->attributes = $_POST['User'];

				if ($model->save()) {

					if (isset($_POST['auto_var']) && $_POST['auto_var']>1)

					{

						for ($i=0;$i<intval($_POST['auto_var']);$i++)

						{

							$userCar= new UserCar;

							$userCar->model = $_POST['User'][$i]['model'];

							$userCar->marka = $_POST['User'][$i]['marka'];

							$userCar->number = $_POST['User'][$i]['carnumber'];

							$userCar->creation_date = $_POST['User'][$i]['creation_date'];

							$userCar->user_id = $model->id;

							if ($userCar->save()){

								$this->redirect(array('view', 'id' => $model->id));	

							}else{

								throw new Exception($userCar->getErrors());

							}					

						}

					}else{

						$userCar = new UserCar;

						$userCar->model = $model->model;

						$userCar->marka = $model->marka;

						$userCar->number = $model->carnumber;

						$userCar->creation_date = $model->creation_date;

						$userCar->user_id = $model->id;

						if ($userCar->save()){

							$this->redirect(array('view', 'id' => $model->id));	

						}else{

							throw new Exception($userCar->getErrors());

						}					

					}

					

					

				

				}

			}

			


			$this->render('update', array(

				'model' => $model,

				'post' =>$post,

			));

		}else{

			//throw new CHttpException(403, Yii::t("yii", "You are not authorized to perform this action."));

			$this->redirect(Yii::app()->user->returnUrl);

		}

	}




<?php

$form = $this->beginWidget('bootstrap.widgets.BootActiveForm', array(

	'id'=>'horizontalForm',

	'enableAjaxValidation'=>true,

	'clientOptions'=>array(

		'validateOnSubmit'=>true,

	),

	'inlineErrors' => false,

)); ?>


	<fieldset>

		<?php echo $form->errorSummary($model); ?>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'username', array('class'=>'span3','maxlength'=>128)); ?>

		</div>

		<div class="control-group">

		<?php if ($model->isNewRecord): ?>

			<?php echo $form->passwordFieldRow($model, 'password', array('class'=>'span3','maxlength'=>128)); ?>

		<?php else: ?>

			<?php echo $form->passwordFieldRow($model, 'npassword', array('class'=>'span3','maxlength'=>128)); ?>

		<?php endif; ?>

		</div>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'lname', array('class'=>'span3','maxlength'=>128)); ?>

		</div>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'fname', array('class'=>'span3','maxlength'=>128)); ?>

		</div>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'sname', array('class'=>'span3','maxlength'=>128)); ?>

		</div>

		<?

			$postArr = array();

			foreach ($post->findAll() as $value) {

				$postArr[$value->title] = $value->title;

			}

		?>

		<div class="control-group">

		<?php echo $form->dropDownListRow($model, 'post', $postArr, array('class'=>'span4')); ?>

		</div>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'phone', array('class'=>'span3')); ?>

		</div>

		<div class="control-group">

		<?php echo $form->textFieldRow($model, 'email', array('class'=>'span3','maxlength'=>128)); ?>

		</div>

		<div class="control-group">

			<?php echo $form->labelEx($model,'birthday', array('class'=>'control-label', 'for'=>'birthday')); ?>

			<div class="controls">

				<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

					'model'=>$model,

					'attribute'=>'birthday',

					// additional javascript options for the date picker plugin

					'options'=>array(

						//'showAnim'=>'fold',

						'buttonImage'=>Yii::app()->baseUrl . '/images/date.png',

						'buttonImageOnly'=>true,

						'buttonText'=>'Укажите дату рождения',

                        'showOn'=>'button',

                        'changeMonth'=> 'true',

						'changeYear' => 'true'

					),

					'htmlOptions'=>array(

						'class'=>'span2',

						'id'=>'birthday',

						'readonly'=>true,

						'rel'=>'tooltip',

						'title'=>'Выберите дату в календаре',

					),

					'language'=>Yii::app()->language,

				)); ?>

			</div>

	  </div>

	  

	  

	  <div class="control-group">

	  	<legend>Паспортные данные</legend>

    	<!--<label  class="control-label">Паспорт</label>-->

      <div class="controls">

        <?php echo $form->textField($model,'pass_seria',array("class"=>"span1","placeholder"=>'Серия...')); ?>

        <?php echo $form->textField($model,'pass_number',array("class"=>"span2","placeholder"=>'Номер...')); ?>

      </div>

      

   	 </div>

    

    <div class="control-group">

			<?php echo $form->labelEx($model,'pass_date_of_issue', array('class'=>'control-label', 'for'=>'pass_date_of_issue')); ?>

			<div class="controls">

				<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

					'model'=>$model,

					'attribute'=>'pass_date_of_issue',

					// additional javascript options for the date picker plugin

					'options'=>array(

						//'showAnim'=>'fold',

						'buttonImage'=>Yii::app()->baseUrl . '/images/date.png',

						'buttonImageOnly'=>true,

						'buttonText'=>'Укажите дату рождения',

                        'showOn'=>'button',

                        'changeMonth'=> 'true',

						'changeYear' => 'true'

					),

					'htmlOptions'=>array(

						'class'=>'span2',

						'id'=>'pass_date_of_issue',

						'readonly'=>true,

						'rel'=>'tooltip',

						'title'=>'Выберите дату в календаре',

					),

					'language'=>Yii::app()->language,

				)); ?>

			</div>

	  </div>

	  <div class="control-group">

	  <?php echo $form->textFieldRow($model, 'pass_place_of_issue', array('class'=>'span7'));?>

	  </div>

	  <div class="control-group">

	  <?php echo $form->textFieldRow($model, 'pass_registration', array('class'=>'span7')); ?>

	  </div>

	  

	  <div class="control-group">

	  	<legend>Данные о автомобиле</legend>

	  </div>

	  <div class="control-group">

	  	<?php echo $form->textFieldRow($model, '[0]marka', array('class'=>'span5')); ?>

	  </div>

	  <div class="control-group">

	  	<?php echo $form->textFieldRow($model, '[0]model', array('class'=>'span5')); ?>

	  </div>

	  

	  <div class="control-group">

	  	<?php echo $form->textFieldRow($model, '[0]carnumber', array('class'=>'span5')); ?>

	  </div>

	  

	  <div class="control-group">

	  	<?php echo $form->textFieldRow($model,'[0]creation_date',array('class'=>'span1'));?>

	  </div>

	 <div class="span3">

	 	<a class="btn btn-primary addAuto"><i class="icon-white icon-plus"></i>Еще Авто</a>

	 </div>

	 

	 <input type="hidden" value ="1"  name ="auto_var"/>

	</fieldset>

	<div class="form-actions">

		<?php echo CHtml::htmlButton('<i class="icon-ok icon-white"></i> ' . Yii::t('app', 'Сохранить'),

										array('class'=>'btn btn-primary', 'type'=>'submit')); ?>

		<?php echo CHtml::htmlButton('<i class="icon-ban-circle"></i> ' . Yii::t('app', 'Очистить'),

									array('class'=>'btn', 'type'=>'reset')); ?>

	</div>


	<p class="help-block">

		<span class="label label-info">Info</span>&nbsp;

		<?php echo Yii::t('app', 'Поля, отмеченные <span class="required">*</span> обязательны для заполнения.'); ?>

	</p>


<?php $this->endWidget(); ?>


<script>

	auto_var = 1;

	$(function(){

		

		$(".addAuto").click(function(){

			var a = $(this)[0];

			$.post("/user/addCar/", { index: auto_var },

			 function(d,a){

			 	$(d).insertBefore($(".addAuto").parent('div')); 

			 	auto_var+=1;

			 	$("input[name='auto_var']").val(auto_var);

			 }

			);

		})

	});




user/addCar




<div class="control-group">

  	<label for="User_<?=$i?>_marka">Марка автомобиля</label>

  	<input class="span5" name="User[<?=$i?>][marka]" id="User_<?=$i?>_marka" type="text">

  	<span class="help-block" id="User_<?=$i?>_marka_em_" style="display: none"></span>	  

</div>




<div class="control-group">

  	<label for="User_<?=$i?>_model">Модель автомобиля</label>

  	<input class="span5" name="User[<?=$i?>][model]" id="User_<?=$i?>_model" type="text">

  	<span class="help-block" id="User_<?=$i?>_model_em_" style="display: none"></span>	  

</div>

  

<div class="control-group">

  	<label for="User_<?=$i?>_carnumber">Гос номер</label>

  	<input class="span5" name="User[<?=$i?>][carnumber]" id="User_<?=$i?>_carnumber" type="text" maxlength="6">

  	<span class="help-block" id="User_<?=$i?>_carnumber_em_" style="display: none"></span>	  

</div>

  


<div class="control-group">

	  	<label for="User_0_creation_date">Дата выпуска автомобиля</label>

	  	<input class="span1" name="User[<?=$i?>][creation_date]" id="User_<?=$i?>_creation_date" type="text" maxlength="4">

	  	<span class="help-block" id="User_<?=$i?>_creation_date_em_" style="display: none"></span>

</div>



userCar


class UserCar extends CActiveRecord{

	public function rules(){

		return array(

			array('marka,model,number,creation_date,user_id','required'),

			array('marka,model,number,creation_date','safe'),

			array('user_id','numerical')

			

		);

	}

	

	public function attributeLabels()

	{

		return array(

				'marka'=>'Марка автомобиля',

				'model'=>'Модель автомобиля',

				'number'=> 'Гос номера',

				'creation_date'=>'Дата выпуска автомобиля',

			);

	}

	

	public static function model($className = __CLASS__){

		return parent::model($className);

	}

	

	public function tableName(){

		return '{{user_car}}';

	}

	

	

	protected function beforeSave() {

		return parent::beforeSave();

	}

	

	//Первичный ключ

	public function primaryKey()

	{

	    return 'id';

	}

}



Как сделать сохранение неснкольких машин?