Multiple instances of the same model in the same form, Multiple instances of the same model, Two instances of the same model
[...]
```php
public function actionCreate()
{
$model=new User; // User Model
$addressModel_1 = new Address; // Address Model
$addressModel_2 = new Address; // Address Model
if(!empty($_POST))
{
// Set attribute for home address
$addressModel_1->attributes=$_POST['Address'][1];
// Set attribute for
hcom
epany address
$addressModel_2->attributes=$_POST['Address'][2];
// Set attribute for
company addressuser data
$model->attributes=$_POST['User'];
// Set attribute for user data
// Validate all three model
$valid=$addressModel_1->validate();
// Validate all three model
$valid=$addressModel_2->validate() && $valid;
$valid=$model->validate() && $valid;
if($valid)
{
$addressModel_1->save();
$homeAddressId = $addressModel_1->id;
$addressModel_2->save();
$companyAddressId = $addressModel_2->id;
// Set saved address as user home id
$model->home_address_id = $homeAddressId;
// Set saved address as user
hcom
epany id
$model->company_address_id = $companyAddressId;
// Set saved address as user company id
$model->save();
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
'addressModel_1'=>$addressModel_1,
'addressModel_2'=>$addressModel_2,
));
}
```[...]
```php
public function actionUpdate($id)
{ {
// Load user data in model
$model=User::model()->findByPk($id);
// Load
useraddress data in
maddressModel
_1
$addressModel_1=Address::model()->findByPk($model->home_address_id);
// Load address data in addressModel_
1 2
$addressModel_2=Address::model()->findByPk($model->company_address_id);
// Load address data in addressModel_2
if(!empty($_POST))
{
// Set attribute for home address
$addressModel_1->attributes=$_POST['Address'][1];
// Set attribute for
hcom
epany address
$addressModel_2->attributes=$_POST['Address'][2];
// Set attribute for
company addressuser data
$model->attributes=$_POST['User'];
// Set attribute for user data
// Validate all three model
$valid=$addressModel_1->validate();
// Validate all three model
$valid=$addressModel_2->validate() && $valid;
$valid=$model->validate() && $valid;
if($valid)
{
$addressModel_1->save();
$addressModel_2->save();
$model->save();
}
}
$this->render('update',array(
'model'=>$model,
'addressModel_1'=>$addressModel_1,
'addressModel_2'=>$addressModel_2,
));
}
```
### View Form
For create and update same page r
aender as _form,
**from below view code you can get
the idea
on how
ito pass model
s and set attribute name
s for elements..**
```php
<div class="form">[...]
### Demo
The demo some what look
s like,
<img src="http://i1147.photobucket.com/albums/o556/master753951/multiple_instance_demo.png" alt="All field validation" width="600" />
**
There will beFor every single entry in User table
andthere will be two entry in Address table (
for home and company
) same data update on update scenario).**
I hope this will help to many...