php 验证和保存成功后,数据库中的值未更新

xhv8bpkk  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(101)

大家好,我用yii 2开发的软件有问题。我有一个模型叫Anagrafica,并与它的主键id。与此模型一切工作。我也有一个模型叫AnagraficaOpzioniCarriera扩展第一个。
我有一个视图anagrafica/索引,显示了一个Kartik网格与注册的人的数据,你可以在anagrafica中找到.管理员用户可以通过单击属性“cognome”渲染到anagrafica/update更新Anagrafica模型的数据.
这是调用控制器Anagrafica Controller以到达anagrafica/update的命令
'cognome'=>Grid::Labels('cognome',['anagrafica/update'],\app\helpers\Permits::allow('anagrafica','update'),'id','btn','info','10%'),
这是Anagrafica控制器

public function actionUpdate($id,$error=0,$message='')
     {
         $id = (int)$id;
        
         $model = Anagrafica::findOne(['id' => $id]);
         $model->scenario = 'update';
        
         if ($model->load(Yii::$app->request->post())) {
            
             if($model->validate()){
             }
                
             if($model->save(false)){
                 return $this->redirect(['anagrafica/update','id'=>$model->id]);
             }
         } 
     }
     return $this->render('update', ['model' => $model, 'extended'=>true]);
}

我删除了一些代码来简化它,但这是核心。
一次视图anagrafica/update是在这个页面中,我有一个ActiveForm修改模型的数据,我有一个渲染到一个网格,显示包含在AnagraficaOpzioniCarriera关于$模型,我正在更新的属性.
<?= $this->render('_opzioni_carriera',['parent'=>$model]); ?>
Anagrafica/_opzioni_carriera视图包含显示模型AnagraficaOpzioniCarriera中列的Kartik格网

<?php

use kartik\grid\GridView;
use kartik\select2\Select2;
use kartik\widgets\ActiveForm;
use kartik\editable\Editable;
use kartik\widgets\SwitchInput;
use yii\helpers\ArrayHelper;
use app\helpers\Autoconfigurazione;
use app\models\AnagraficaOpzioniCarriera;
use app\helpers\Grid;
use yii\helpers\Html;
use app\helpers\UserInfo;

/* @var $this yii\web\View */
/* @var $model app\models\AnagraficaOpzioniCarriera*/
$model = new AnagraficaOpzioniCarriera(['scenario'=>'search']);
?>

<div class="">
<?php 
    echo GridView::widget([
        'options'=>[
        'id'=>'opzioni_carriera',
    ],
    'dataProvider'=> $model->search($parent->id,Yii::$app->request->queryParams),
    'showPageSummary'=>false,
    'headerRowOptions'=>['class'=>'kartik-sheet-style'],        
    'pjax'=>true, // pjax is set to always true for this demo
    'pjaxSettings'=>[
        'neverTimeout'=>true,
    ],
    'toolbar'=> [
        [
                'content'=>''
        ],
        ],
        'panel'=>[
        'heading'=>false,
        'footer'=>false,
        'after'=>false,
    ],
    'columns' => Grid::gridColumns([
        'model'=>$model,
        'checkbox'=>false,
        'remove'=>Grid::gridRemove($model),
        'extraOptions' =>[
            'cashback' =>Grid::YNColumn('cashback',['anagrafica-opzioni-carriera/update', 'id' => $parent->id],'left',true,'5%'),
            'compensa'=>Grid::YNColumn('compensa',['anagrafica-opzioni-carriera/update', 'id' => $parent->id],'left',true,'5%'),                    
            'associazione'=>Grid::YNColumn('associazione',['anagrafica-opzioni-carriera/update', 'id' => $parent->id],'left',true,'5%'),                   
            'formazione'=>Grid::YNColumn('formazione',['anagrafica-opzioni-carriera/update', 'id' => $parent->id],'left',true,'5%'),
        ],
    ]);

?>

</div>

cashback,compensa etc..是模型AnagraficaOpzioniCarriera中的属性。在这里,当我试图更新这些属性时,一切看起来都很好,函数model-〉validate()和model-〉load返回真值,但在过程结束时不起作用。老实说,我不知道我必须从控制器的函数返回什么。

public function actionUpdate($id)
 {                 
                
    $model = AnagraficaOpzioniCarriera::findOne(['id_anagrafica' => $id]);
    if (!$model) {
            // Se l'anagrafica opzioni carriera non esiste, genera un'eccezione 404
            throw new \yii\web\NotFoundHttpException(Yii::t('app', 'The requested page does not             exist.'));
        }
        
        $model->scenario = 'update';
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if(Yii::$app->request->post('cashback') != null) $model->cashback = Yii::$app->request->post('cashback');
            if(Yii::$app->request->post('compensa') != null) $model->cashback = Yii::$app->request->post('compensa');
            if(Yii::$app->request->post('associazione') != null) $model->cashback = Yii::$app->request->post('associazione');
            if(Yii::$app->request->post('formazione') != null) $model->cashback = Yii::$app->request->post('formazione');
            if ($model->save()) {                        
                return Json::encode(["success" => true, 'message' => 'Dati aggiornati']);
            }
        }
        
        // Mostra il form di modifica
        return $this->render('_opzioni_carriera', [
            'parent' => $model,
        ]);
    }

有人能帮我吗?我希望我能很好的解释我的问题,但我知道我的英语不是最好的。无论如何,提前感谢所有想帮助我的人,如果你需要其他什么,你可以很容易地问。
我尝试了所有的一切,也记录器,但没有工作
就像有人建议的,这些是模型AnagraficaOpzioni的规则,但是就像我之前说的,model-〉validate()是有效的,因此我认为问题并不在于此

public function rules()
    {
        
        return [
            [['id_anagrafica'], 'required'],
            [['id_anagrafica'], 'integer'],
            [['cashback', 'compensa', 'associazione', 'formazione'], 'required', 'on'=>['update']],
            [['cashback', 'compensa', 'associazione', 'formazione'], 'integer'],
            
            [['id_anagrafica', 'cashback', 'compensa', 'associazione', 'formazione',], 'safe', 'on'=>['search']],
            
        ];
    }
xzlaal3s

xzlaal3s1#

根据你的代码,看起来你是加载所有的数据在一个属性。即**$模型-〉现金回馈**;
你能试试

$model->cashback = Yii::$app->request->post('cashback');
$model->compensa = Yii::$app->request->post('compensa');
$model->associazione = Yii::$app->request->post('associazione');
$model->formazione = Yii::$app->request->post('formazione');

相关问题