how to add page (two related tables in database)

Hi,

I have two tables in my database




CREATE TABLE `Pages` 

  `pageID` int(10) unsigned NOT NULL AUTO_INCREMENT, //ID of the page

) 




CREATE TABLE `PagesText`

  `pageTextID` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `pageID` int(10) unsigned NOT NULL,  //ID of the page - connects to table 'Pages'

  `languageID` int(11) NOT NULL,    //ID of the page language

  `pageTitle` varchar(255) CHARACTER SET utf8 NOT NULL, //page title in the appropriate language

  `pageText` longtext CHARACTER SET utf8 NOT NULL,    //page text in the appropriate language


)




Now if I want to and a new page in English into my system

  1. I add a new page and GET the ID of the new page

  2. now I have the pageID so I can add a new row in pagestext with the title and text of the page in Engish

the question is: how to simplify the process? Do I have to make 3 connection to database? How can I do this in one action in a controller?

Best regards,

Marcin

PS. and how should I make a view?

You can make a view for collect the input only for the table pages text.

When you save, you can do something like this:







$pageText=new PageText();

$pageText->attributes=$_POST['pageText'];

if ($pageText->validate)

{

   $page=new Page;

   $page->save();

   $pageText->pageID;

   $pageText->save();

}



Just a question. What for a table with only one field? Only for be confortable when you delete a page?

thank you for your answer. It helped me.

the main idea was to create a multilangual site.

the table has more columns but I removed them (to simplyfy the problem). In my database (Page) there are also id of the category and isActive (true-false)…

Is it possible to to create a view that will send me 2 models: Page and PageText?

Of course:

In the controller you create two models and send them to the view




$model1=new Page;

$model2=new PagesText;


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

        	'model1'=>$model1,

        	'model2'=>$model2,

   	));



Now in the view you can use $model1 and $model2

ok that true…

but how do I get updated values?


$page=new Page();

$page->attributes=$_POST['page'];

$page->save();




$pageText=new PageText();

$pageText->attributes=$_POST['pageText'];


$pageText->save();

take a lookat this post

I didn’t find it:/

thank you for your replay… I will try to implement it.

Maybe this post is a bit too complex.

Just this:







$page=new Page;

$page->attributes=$_POST['page'];


$pageText=new PageText();

$pageText->attributes=$_POST['pageText'];


$valid=$page->validate();

$valid=$pageText->validate() && $valid; //we have anyway to valid everithing


if ($valid)

{

   $page->save();

   $pageText->pageID;

   $pageText->save();

}



I guess that view should look similar to it:




<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'advertisements-form',

	'enableAjaxValidation'=>false,

)); ?>


	

	<div class="row">

		<?php echo $form->labelEx($page,'page...'); ?>

		<?php echo $form->textField($page,'page...',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($page,'page...'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($pageText,'text'); ?>

		<?php echo $form->textField($pageText,'text',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($pageText,'text'); ?>

	</div>


		

	<div class="row buttons">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Zapisz' : 'Save'); ?>

	</div>


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

So we use to show data:




<?php echo $form->textField($page,'page...');

<?php echo $form->textField($pageText,'pageText...');



and the code from forum to update model?

I’m i right?

Absolutely right!

Did it worked?

to be honest… It doesn’t work…

how the view (_form) should look like?


$model means Page model

$pt means PageText model







<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'pages-form',

	'enableAjaxValidation'=>false,

)); ?>


	<p class="note">Fields with <span class="required">*</span> are required.</p>


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

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

	

	<div class="row">

		<?php echo $form->labelEx($model,'pageCategoryID'); ?>

		<?php echo $form->textField($model,'pageCategoryID'); ?>

		<?php echo $form->error($model,'pageCategoryID'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'isActive'); ?>

		<?php echo $form->textField($model,'isActive',array('size'=>1,'maxlength'=>1)); ?>

		<?php echo $form->error($model,'isActive'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($pt,'languageID'); ?>

		<?php echo $form->textField($pt,'languageID'); ?>

		<?php echo $form->error($pt,'languageID'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($pt,'pageTitle'); ?>

		<?php echo $form->textField($pt,'pageTitle',array('size'=>60,'maxlength'=>255)); ?>

		<?php echo $form->error($pt,'pageTitle'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($pt,'pageText'); ?>

		<?php echo $form->textArea($pt,'pageText',array('rows'=>6, 'cols'=>50)); ?>

		<?php echo $form->error($pt,'pageText'); ?>

	</div>

	

	<div class="row buttons">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

	</div>


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


</div><!-- form -->

This form only returns $_POST[‘Pages’] but it doesn’t return $_POST[‘PagesText’].

That is really strange… what html code generates, for example,


<?php echo $form->textField($pt,'pageTitle',array('size'=>60,'maxlength'=>255)); ?>

?

The field should have a name like pagesText[pageTitle], isn’t it?

it generates:

<input size="60" maxlength="255" name="pagestext[pageTitle]" id="pagestext_pageTitle" type="text" value="PL tytuł"/>

It puts good data into inputs but if I click send button it only sends data connected with $model (Page)

print_r($_POST[‘Pages’]) gives Array ( [pageCategoryID] => 1 [isActive] => 1 )

print_r($_POST[‘PagesText’]) gives “none” :(

no data connected with $pt (PageText) is being send :(

my controler looks:


	public function actionUpdate($id)

	{

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

		

		$pt=Pagestext::model()->find(

		array(

		'condition' => 'languageID = :langID and pageID = :pageID',

		'params' => array(':pageID' => $model->pageID, ':langID' => 1),

		));

		if($pt===null)

			throw new CHttpException(404,'The requested page does not exist.');

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		 

		 

		if(isset($_POST['Pages']))

		{


			if (isset($_POST['Pagestext']))

			{

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

				$pt->attributes=$_POST['Pagestext'];


				if($model->save())

				{

					if ($pt->save())

					{

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

					};

				}

			}

			

		}


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

			'model'=>$model,

			'pt'=>$pt,			

		));

	}

for next generation: there should be: $_POST[‘pagestext’]; insted of $_POST[‘Pagestext’];

thank zaccaria and mdomba for your help. You saved my life ;)

hi i have a two tables…

Table1: tbl_skill

values are: skill_id,skill_name,description

table2: tbl_responsibility

values are: id,first name, society_id,skilltype,second name…etc…,

how to connect the skill type(table2) and table1…

because i want the values of skill_name(table1)is shown in skilltype(table2)…

send me the right way sir/madam…