我有一个模型website
和一个模型url
。
每个url data
都附加到website data
。 url
通过website
与website_id
相关联。
在我的网络应用中,我需要在接受数据之前检查数据。
我想在屏幕上看到有关url data
的所有数据,我设法做到了这一点。
现在,我还想更新屏幕上列出的所有数据。
在屏幕上,我有整个url data
和website data
,但当我尝试保存数据时,website data
为空。
我的逻辑是向url
模型添加一个属性:public $website;
在url
模型中,方法aftersave
:
protected function afterSave() {
$w = null;
$w = Website::model()->findByAttributes(array('id' => $this->website_id));
//echo '<pre>';
//print_r($w);
print_r($this->website);
$w->link = $this->website['link'];
$w->domain = $this->website['domain'];
$w->description = $this->website['description'];
$w->save(false);
die;
return parent::afterSave();
}
以下是_form
文件中的重要代码:
<div class="row">
<?php echo $form->labelEx($model,'will_expire'); ?>
<?php echo $form->dropDownList($model,'will_expire',array(0=>'No',1=>'Yes')); ?>
<?php echo $form->error($model,'will_expire'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model_website,'link'); ?>
<?php echo $form->textField($model_website,'link'); ?>
<?php echo $form->error($model_website,'link'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model_website,'domain'); ?>
<?php echo $form->textField($model_website,'domain'); ?>
<?php echo $form->error($model_website,'domain'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model_website,'description'); ?>
<?php echo $form->textField($model_website,'description'); ?>
<?php echo $form->error($model_website,'description'); ?>
</div>
答案 0 :(得分:1)
问题很少:
url
和website
,以便现有网址的$url->website
为您提供有效的网站记录?$w = Website::model()->findByAttributes(array('id' => $this->website_id));
将始终返回NULL 我假设您已在website
模型中定义了URL
的关系。
根据我的理解建议的功能:
protected function afterSave() {
//data is already assigned by the caller
$w = null;
$w = Website::model()->findByAttributes(array('id' => $this->website_id));
if($w)
{
Yii::log("updating existing website data","info");
$this->website->save();
}
else
{
Yii::log("creating new website data","info");
$this->website->save();
$this->website_id = $this->website->website_id;
$this->update(array('website_id')); //save the relation
Yii::log("created new website {$this->website_id}","info");
}
return parent::afterSave();
}
答案 1 :(得分:0)
原来是w
而不是W
的小错误,对象属性而不是数组;
好的,让我教你如何做到这一点;
我有2个模型:Url
和Website
。
Url
模型具有外键website_id
以及与模型Website
的关系;
在Url
模型中,我有一个名为website
的属性,我将其声明为:public $website = array();
;
通过使用bookmarklet
的{{1}}添加数据,以便在管理员更新/检查时数据将会出现;
在API
模型中,我有一个方法Url
:
afterSave
其中protected function afterSave() {
$w = null;
$w = Website::model()->findByAttributes(array('id' => $this->website_id));
if($w)
{
$w->link = $this->website['link'];
$w->domain = $this->website['domain'];
$w->description = $this->website['description'];
$w->save();
}
return parent::afterSave();
}
填充在$this->website
UrlController
上,如:
actionUpdate
并稍后传递给public function actionUpdate($id, $type = 'update') {
$model = $this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if (isset($_POST['Url'])) {
$model->attributes = $_POST['Url'];
$model->website = $_POST['Website'];
if ($model->save())
if ($type == 'update')
$this->redirect(array('view', 'id' => $model->id));
else
$this->redirect(array('/admin/url/approvePublicLink'));
}
$model_website = Website::model()->findByAttributes(array('id'=>$model->website_id));
$this->render('update', array(
'model' => $model,
'model_website' => $model_website,
));
}
方法;
这是afterSave
视图:
_update
这是获得部分的<div style="padding:20px 20px;">
<h1>Update Url, Website, Keywords ...</h1>
<?php echo $this->renderPartial('_form', array(
'model'=>$model,
'model_website' => $model_website,
)); ?>
</div>
视图:
_form
我希望它有所帮助。