m1m1m1
(Marcinmil)
September 27, 2010, 7:59pm
1
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
I add a new page and GET the ID of the new page
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?
zaccaria
(Matteo Falsitta)
September 28, 2010, 6:18am
2
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?
m1m1m1
(Marcinmil)
September 28, 2010, 9:02am
3
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?
mdomba
(Maurizio Domba Cerin)
September 28, 2010, 9:38am
4
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
m1m1m1
(Marcinmil)
September 28, 2010, 10:28am
5
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();
m1m1m1
(Marcinmil)
September 28, 2010, 11:51am
7
I didn’t find it:/
thank you for your replay… I will try to implement it.
zaccaria
(Matteo Falsitta)
September 28, 2010, 11:54am
8
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();
}
m1m1m1
(Marcinmil)
September 28, 2010, 11:58am
9
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?
m1m1m1
(Marcinmil)
October 1, 2010, 12:12pm
11
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’].
zaccaria
(Matteo Falsitta)
October 1, 2010, 12:21pm
12
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?
m1m1m1
(Marcinmil)
October 1, 2010, 12:29pm
13
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
m1m1m1
(Marcinmil)
October 1, 2010, 12:30pm
14
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,
));
}
m1m1m1
(Marcinmil)
October 1, 2010, 12:57pm
15
for next generation: there should be: $_POST[‘pagestext’]; insted of $_POST[‘Pagestext’];
thank zaccaria and mdomba for your help. You saved my life
ptsuthakar
(Ptsuthakar90)
December 10, 2011, 11:32am
16
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…