2016-12-09 6 views
0

ich so einen Code haben,php yii2 wie man automatisch ID in Abfrage yii2 einfügen?

 $request = Yii::$app->request; 
     $post = $request->post(); 

     $filesettingid = $post['filesettingid']; 
     $checkboxValue = $post['selection']; 


     for($i=0;$i<sizeof($checkboxValue);$i++) { 
      $store = Yii::$app->db->createCommand('SELECT id FROM store WHERE port='.$checkboxValue[$i])->queryAll(); 
      $storeid = $store[$i]['id']; 

      Yii::$app->db->createCommand()->insert('tes', 
          [ 
           'id' => $i+1, 
           'filesetting_id' => $filesettingid, 
           'store_id' => $storeid 
          ])->execute(); 
     } 

, was ich will, ist, jedes i die neue data einfügen, id automaticly wie 1,2,3,4 generieren.

das Problem in obigem Code ist, kann die ID immer 1.

ist es möglich, es real zu machen? so was ich will ist:

Erste mal einfügen, id = 1, zweite ist id = 2, und das passiert automatisch.

Antwort

1

Haben Sie darüber nachgedacht, die Datenbank so einzustellen, dass die Werte bei jedem Einfügen automatisch erhöht werden?

Nehmen Sie als Beispiel Yii2 Standard-Benutzertabelle. Das ID-Feld wird automatisch inkrementiert, und Sie müssen sich keine Sorgen darüber machen, es problematisch zu setzen. Jedes Mal, wenn Sie eine neue Insert-Engine senden, wird die Inkrement-ID von sich selbst gespeichert. Siehe Standardmigration unter "advanced template"\console\migrations\m130524_201442_int. (Ihr Dateiname kann unterschiedlich sein, abhängig von der Yii2 Version)

$this->createTable('{{%user}}', [ 
    'id' => $this->primaryKey(), 
    'username' => $this->string()->notNull()->unique(), 
    'auth_key' => $this->string(32)->notNull(), 
    'password_hash' => $this->string()->notNull(), 
    'password_reset_token' => $this->string()->unique(), 
    'email' => $this->string()->notNull()->unique(), 

    'status' => $this->smallInteger()->notNull()->defaultValue(0), 
    ......... 
], $tableOptions); 

Wenn ‚id‘ auf Primärschlüssel Datenbank Einstellung kennt automatisch auto es zu erhöhen. Wenn Sie bereits eine Tabelle der ID-Feld haben, ist nicht Primärschlüssel Sie die followign Migration verwenden können:

$this->alterColumn('{{%databaseName}}', 'columnName', $this->integer()->notNull().' AUTO_INCREMENT'); 

können Sie es auch von Management-Konsole festlegen oder eine SQL-Abfrage ausführen. Abhängig von der Datenbank-Engine, die Sie verwenden, kann dies ein wenig anders aussehen, aber das Konzept ist das gleiche.

MYSQL:

In MySQL Workbench direkt in Frage klicken Sie auf Tabelle, wählen Sie Tabelle ändern und überprüfen NNm und AI neben Spalte Sie Autoinkrement möchten. See Screenshot

Oder laufen Befehl:

ALTER TABLE `dbName`.`nameOfTheTable` MODIFY `columnName` INT AUTO_INCREMENT NOT NULL; 

Ich bin ein bisschen auf meine SQL rostig, also wenn es nicht zulassen, funktioniert es mich wissen, ich werde Sie mit der rechten Befehl erhalten.

Hoffe, das hilft. Viel Glück.

+0

großartig !, das ist, was ich total brauche, großer Dank Sir – yosafat

+0

Sie sind herzlich willkommen! –