2015-09-16 4 views
5

Ich weiß nicht, was falsch ist, aber ich kann nicht in die Datenbank einfügen.kann nicht in ActiveRecord Yi2 in die Datenbank einfügen

das ist, was ich in dem Modell bekam.

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, 
      ]); 
     } 
    } 

und in meine Ansichten/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(); ?> 

Es keine Fehler geben, aber wenn ich es auf überprüfen die Datenbank, nichts hinzugefügt. Ich hoffe, dass mir jeder helfen kann. Vielen Dank. Ich bin neu bei YII2, also verstehe ich es immer noch nicht.

+0

Können Sie mir den Wert von 'Garantie_Datum' mitteilen? – GAMITG

+0

@gamitg ich der Wert ist ein Datum, denke ich. Ich habe ein Kartikeldatenpicker-Widget verwendet. Außerdem habe ich meinen Datentyp in mysql in 'text' anstatt in' date' geändert, um sicherzustellen, dass das Datum in dbase addiert werden kann. – BlackSkull

+0

Sie können versuchen, Daten mit '$ Warrantytwo-> save (false)' zu speichern. Es bedeutet, ohne Validierung Daten zu speichern, um das Problem zu finden. – GAMITG

Antwort

2

Da Sie feststellen müssen, in welchen Situationen das Problem auftritt, testen Sie auf diese Weise. (Manchmal erzeugt es ein wenig Verwirrung, weil validate() immer etwas zurückgibt)

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; 
    } 
+0

hallo, mein Herr. Ich habe deine Antwort versucht, nachdem das Formular eingereicht wurde, bekomme ich nur ein "falsches" Wort. Wo denkst du war der Fehler? Danke für die Antwort. :) – BlackSkull

+1

Dann gibt die Validierung false zurück. Finden Sie die Fehler, die Ihre Regeln selektiv kommentieren. Dies wird Ihnen helfen, die Ursache des Validierungsfehlers zu identifizieren. '[['warranty_date', 'date'], 'string'],' Datumszeichenfolge ist seltsam. – scaisEdge

+0

Ich glaube ich weiß wo der Fehler liegt. Es ist der Datentyp von created_by. Aber ich werde deine Antwort abstimmen, weil ich es hilfreich finde, herauszufinden, wo der Fehler passiert ist. Danke! – BlackSkull

Verwandte Themen