Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cannot insert into the database in ActiveRecord Yii2

I don't know what's wrong but I cannot insert into the database.

this is what I got in the model.

warranty.php

<?php

    namespace app\models;

    use Yii;
    use yii\db\ActiveRecord;
    use yii\behaviors\TimestampBehavior;
    use yii\db\Expression;
    use yii\helpers\VarDumper;
    /**
     * This is the model class for table "warrantytwo".
     *
     * @property integer $id
     * @property string $item_no
     * @property string $warranty_date
     * @property string $date
     * @property integer $created_by
     * @property string $tstamp
     */
    class Warrantytwo extends ActiveRecord
    {
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'warrantytwo';
        }

        public function behaviors()
        {
            return [
                [
                    'class' => TimestampBehavior::className(),
                    'createdAtAttribute' => 'tstamp',
                    'updatedAtAttribute' => false,
                    'value' => new Expression('NOW()'),
                ],
            ];
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [['item_no', 'warranty_date'], 'required'],

                [['warranty_date', 'date'], 'string'],

                ['created_by', 'default', 'value' => 'none'],

                [['created_by'], 'integer'],

                [['warranty_date', 'date','tstamp'], 'safe'],

                [['item_no'], 'string', 'max' => 100]
            ];
        }

        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'id' => 'ID',
                'item_no' => 'Item No.',
                'warranty_date' => 'Warranty Date',
                'date' => 'Date',
                'created_by' => 'Created By',
                'tstamp' => 'tstamp',
            ];
        }

        public function addWarrantytwo()
        {
            if ($this->validate()) {
                $Warrantytwo = new Warrantytwo();
                $Warrantytwo->item_no = $this->item_no;
                $Warrantytwo->warranty_date = $this->warranty_date;
                $Warrantytwo->created_by = 'admin1';
                $Warrantytwo->date = date('Y-m-d H:i:s');
                //$Warrantytwo->touch('tstamp');

                if ($Warrantytwo->save()) 
                {
                    return $Warrantytwo;
                }else {
                    VarDumper::dump($Warrantytwo->getErrors());
                }
            }

            //return null;
        }
    }

controller.php

public function actionWarranty()
    {
        //$model= new WarrantyDate();
        $model= new Warrantytwo();

        if ($model->load(Yii::$app->request->post()) && $model->addWarrantytwo()) {
            return $this->redirect(['warranty']);
        } 
        else {
        return $this->render('warranty', [
            'model' => $model,
            ]);
        }
    }

and in my views/form

 <?php $form = ActiveForm::begin([
      'id' => 'new-warranty-form',
      //'options' => ['class' => 'form-horizontal'], //for yii\ActiveForm
        'type' => ActiveForm::TYPE_HORIZONTAL, //for krajee\ActiveForm
        'formConfig' => ['labelSpan' => 4, 'deviceSize' => ActiveForm::SIZE_SMALL]  ]); ?>
                <div class="form-horizontal">

  <?= $form->field($model, 'item_no', 
        ['addon' => ['append' => ['content'=> '<a href="#w" onClick="sample()"><i class="glyphicon glyphicon-search"></i></a>']]    ]); ?>                          

    <?= $form->field($model, 'warranty_date')-> widget(DatePicker::classname(),
    [
    'options' => ['placeholder' => 'Date Claimed'],
    'pluginOptions' => [ 'autoclose'=>true ]
                ]); ?>

    </div>
    <div class="col-sm-offset-5 col-md-9">

     <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'warranty-button']) ?>

  <?= Html::resetButton('Reset', ['class' => 'btn btn-default']); ?>
     </div>

     <?php ActiveForm::end(); ?>

It doesn't give any errors but when I check it on the database, nothing added. I hope anyone can help me. Thank you. I'm new to YII2 so I still don't get it.

like image 691
BlackSkull Avatar asked Oct 31 '22 19:10

BlackSkull


1 Answers

Since you have to determine in what situations the problem occurs the test in this way. (Sometimes it creates a bit of confusion because validate () returns always something)

    public function addWarrantytwo()
    {
        if ($this->validate()) {
            $Warrantytwo = new Warrantytwo();
            $Warrantytwo->item_no = $this->item_no;
            $Warrantytwo->warranty_date = $this->warranty_date;
            $Warrantytwo->created_by = 'admin1';
            $Warrantytwo->date = date('Y-m-d H:i:s');
            //$Warrantytwo->touch('tstamp');

            if ($Warrantytwo->save(false))   // try save without validation 
            {
                return $Warrantytwo;
            }else {
                VarDumper::dump($Warrantytwo->getErrors());
                exit;
            }
        }
        else {
            VarDumper::dump($this->validate());  // check for the correct flow
            exit;
        }

        //return null;
    }
like image 153
ScaisEdge Avatar answered Nov 02 '22 09:11

ScaisEdge