Php Yii 1.1.19联接表更新未完全工作
问题是:如果我选中“新建”复选框,它将更新数据,但当我取消选中所有现有复选框时,它不起作用。即使我取消选中多个复选框并留下一个复选框,它仍然有效。当我选中所有未选中的复选框来更新数据时,只是不工作。如有任何建议,将不胜感激 这是我使用的获取联接表ID的模型:Php Yii 1.1.19联接表更新未完全工作,php,yii,yii2-advanced-app,Php,Yii,Yii2 Advanced App,问题是:如果我选中“新建”复选框,它将更新数据,但当我取消选中所有现有复选框时,它不起作用。即使我取消选中多个复选框并留下一个复选框,它仍然有效。当我选中所有未选中的复选框来更新数据时,只是不工作。如有任何建议,将不胜感激 这是我使用的获取联接表ID的模型: public function getProfileCampaigns($campaignIds = true) { $campaignData = array(); $campaignProfiles =
public function getProfileCampaigns($campaignIds = true) {
$campaignData = array();
$campaignProfiles = Yii::app()->db->createCommand()->select('campaign_id')
->from('campaign_profiles')
->where('profile_id = :profile_id',array(':profile_id' => $this->profile_id))
->queryAll();
// Check if need to send only campaign ids
if ($campaignIds) {
foreach ($campaignProfiles as $campaignProfile) {
$campaignData[] = $campaignProfile['campaign_id'];
}
}
return $campaignData;
}
这是我的控制器的更新操作:
public function actionUpdate($id)
{
$model = $this->loadModel($id);
$model->setScenario(Profile::SCENARIO_UPDATE);
// Get active campaigns
$campaigns = Campaign::model()->findAll();
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
// Check if profile have any releated profile
$model->campaignIds = $model->getProfileCampaigns();
if(isset($_POST['Profile']))
{
$model->attributes=$_POST['Profile'];
if($model->validate()) {
$model->save();
// Check if any campaign choosed
if ($_POST['Profile']['campaignIds']) {
Yii::app()->db->createCommand()->delete('campaign_profiles', 'profile_id = :profile_id', array(':profile_id' => $model->profile_id));
foreach ($_POST['Profile']['campaignIds'] as $campaignId) {
$campaignProfile = new CampaignProfile();
$campaignProfile->setIsNewRecord(true);
$campaignProfile->campaign_id = $campaignId;
$campaignProfile->profile_id = $model->profile_id;
$campaignProfile->save();
}
Yii::app()->user->setFlash('success', 'The Profile was successfully updated.');
$this->redirect(array('update','id'=>$model->profile_id));
}
}
}
$this->render('update',array(
'model' => $model,
'campaignListData' =>$campaigns,
));
}
这是获取更新复选框选择的表单:
<div class="form-group">
<?php echo $form->labelEx($model,'campaignIds'); ?>
<div class="col-sm-9">
<?php echo $form->checkBoxList($model, 'campaignIds', CHtml::listData($campaignListData, 'id', 'name')); ?>
<?php echo $form->error($model,'campaignIds'); ?>
</div>
</div>
这是因为只有选定的复选框作为表单数据发送。如果未选中复选框,则不会发送数据,因此可能会使用模型中的默认值/旧值 您可以使用
uncheckValue
设置来定义默认值,当未选中复选框时,该值将被发送:
<div class="form-group">
<?php echo $form->labelEx($model,'campaignIds'); ?>
<div class="col-sm-9">
<?php echo $form->checkBoxList(
$model,
'campaignIds',
CHtml::listData($campaignListData, 'id', 'name'),
['uncheckValue' => '']
); ?>
<?php echo $form->error($model,'campaignIds'); ?>
</div>
</div>
从1.1.7开始,有一个名为“uncheckValue”的特殊选项可用。它可用于设置未选中复选框时将返回的值。默认情况下,此值为“”。在内部,会呈现一个隐藏字段,因此当未选中复选框时,我们仍然可以获得该值。如果“uncheckValue”设置为NULL,则不会呈现隐藏字段
谢谢你的帮助。我必须在模型中使用您的solution plus afterSave()函数才能使其工作。非常感谢。