Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii 1.1.19联接表更新未完全工作_Php_Yii_Yii2 Advanced App - Fatal编程技术网

Php Yii 1.1.19联接表更新未完全工作

Php Yii 1.1.19联接表更新未完全工作,php,yii,yii2-advanced-app,Php,Yii,Yii2 Advanced App,问题是:如果我选中“新建”复选框,它将更新数据,但当我取消选中所有现有复选框时,它不起作用。即使我取消选中多个复选框并留下一个复选框,它仍然有效。当我选中所有未选中的复选框来更新数据时,只是不工作。如有任何建议,将不胜感激 这是我使用的获取联接表ID的模型: public function getProfileCampaigns($campaignIds = true) { $campaignData = array(); $campaignProfiles =

问题是:如果我选中“新建”复选框,它将更新数据,但当我取消选中所有现有复选框时,它不起作用。即使我取消选中多个复选框并留下一个复选框,它仍然有效。当我选中所有未选中的复选框来更新数据时,只是不工作。如有任何建议,将不胜感激

这是我使用的获取联接表ID的模型:

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()函数才能使其工作。非常感谢。