getLastInsertID() public méthode

Returns the ID of the last inserted row or sequence value.
See also: http://www.php.net/manual/en/function.PDO-lastInsertId.php
public getLastInsertID ( string $sequenceName = '' ) : string
$sequenceName string name of the sequence object (required by some DBMS)
Résultat string the row ID of the last row inserted, or the last value retrieved from the sequence object
 /**
  * Returns id of inserted record
  *
  * @return int
  */
 protected function lastInsertId()
 {
     return (int) $this->db->getLastInsertID();
 }
 /**
  * Saves messages to database
  *
  * @param array $messages
  * @param \yii\db\Connection $db
  * @param string $sourceMessageTable
  * @param string $messageTable
  * @param boolean $removeUnused
  * @param array $languages
  */
 protected function saveMessagesToDb($messages, $db, $sourceMessageTable, $messageTable, $removeUnused, $languages)
 {
     $q = new \yii\db\Query();
     $current = [];
     foreach ($q->select(['id', 'category', 'message'])->from($sourceMessageTable)->all() as $row) {
         $current[$row['category']][$row['id']] = $row['message'];
     }
     $new = [];
     $obsolete = [];
     foreach ($messages as $category => $msgs) {
         $msgs = array_unique($msgs);
         if (isset($current[$category])) {
             $new[$category] = array_diff($msgs, $current[$category]);
             $obsolete += array_diff($current[$category], $msgs);
         } else {
             $new[$category] = $msgs;
         }
     }
     foreach (array_diff(array_keys($current), array_keys($messages)) as $category) {
         $obsolete += $current[$category];
     }
     if (!$removeUnused) {
         foreach ($obsolete as $pk => $m) {
             if (mb_substr($m, 0, 2) === '@@' && mb_substr($m, -2) === '@@') {
                 unset($obsolete[$pk]);
             }
         }
     }
     $obsolete = array_keys($obsolete);
     $this->stdout("Inserting new messages...");
     $savedFlag = false;
     foreach ($new as $category => $msgs) {
         foreach ($msgs as $m) {
             $savedFlag = true;
             $db->createCommand()->insert($sourceMessageTable, ['category' => $category, 'message' => $m])->execute();
             $lastID = $db->getLastInsertID();
             foreach ($languages as $language) {
                 $db->createCommand()->insert($messageTable, ['id' => $lastID, 'language' => $language])->execute();
             }
         }
     }
     $this->stdout($savedFlag ? "saved.\n" : "Nothing new...skipped.\n");
     $this->stdout($removeUnused ? "Deleting obsoleted messages..." : "Updating obsoleted messages...");
     if (empty($obsolete)) {
         $this->stdout("Nothing obsoleted...skipped.\n");
     } else {
         if ($removeUnused) {
             $db->createCommand()->delete($sourceMessageTable, ['in', 'id', $obsolete])->execute();
             $this->stdout("deleted.\n");
         } else {
             $db->createCommand()->update($sourceMessageTable, ['message' => new \yii\db\Expression("CONCAT('@@',message,'@@')")], ['in', 'id', $obsolete])->execute();
             $this->stdout("updated.\n");
         }
     }
 }
 /**
  * Saves messages to database
  *
  * @param array $messages
  * @param \yii\db\Connection $db
  * @param string $sourceMessageTable
  * @param string $messageTable
  * @param boolean $removeUnused
  * @param array $languages
  */
 public function saveMessagesToDb($messages, $db, $sourceMessageTable, $messageTable, $removeUnused, $languages)
 {
     $q = new \yii\db\Query();
     $current = [];
     foreach ($q->select(['id', 'category', 'message'])->from($sourceMessageTable)->all() as $row) {
         $current[$row['category']][$row['id']] = $row['message'];
     }
     $new = [];
     $obsolete = [];
     foreach ($messages as $category => $msgs) {
         $msgs = array_unique($msgs);
         if (isset($current[$category])) {
             $new[$category] = array_diff($msgs, $current[$category]);
             $obsolete += array_diff($current[$category], $msgs);
         } else {
             $new[$category] = $msgs;
         }
     }
     foreach (array_diff(array_keys($current), array_keys($messages)) as $category) {
         $obsolete += $current[$category];
     }
     if (!$removeUnused) {
         foreach ($obsolete as $pk => $m) {
             if (mb_substr($m, 0, 2) === '@@' && mb_substr($m, -2) === '@@') {
                 unset($obsolete[$pk]);
             }
         }
     }
     $obsolete = array_keys($obsolete);
     $this->stdout("Inserting new messages...");
     $savedFlag = false;
     $columnNames = $db->getTableSchema($sourceMessageTable)->columnNames;
     $hasLocationColumn = in_array('location', $columnNames) ?: false;
     d($hasLocationColumn);
     foreach ($new as $category => $msgs) {
         d([$category, $msgs]);
         foreach ($msgs as $m) {
             $savedFlag = true;
             $msgHash = md5($m);
             $sourceMessageData = ['category' => $category, 'message' => $m];
             if (true === $hasLocationColumn) {
                 $sourceMessageData['location'] = $this->extractLocations($category, $m);
                 $sourceMessageData['hash'] = $msgHash;
             }
             $db->createCommand()->insert($sourceMessageTable, $sourceMessageData)->execute();
             $lastID = $db->driverName == 'pgsql' ? $db->getLastInsertID($sourceMessageTable . '_id_seq') : $db->getLastInsertID();
             dd($lastID);
             foreach ($languages as $language) {
                 $messageData = ['id' => $lastID, 'language' => $language];
                 if (true === $hasLocationColumn) {
                     $messageData['hash'] = $msgHash;
                 }
                 $db->createCommand()->insert($messageTable, $messageData)->execute();
             }
         }
     }
     $this->stdout($savedFlag ? "saved." . PHP_EOL : "Nothing new...skipped." . PHP_EOL);
     $this->stdout($removeUnused ? "Deleting obsoleted messages..." . PHP_EOL : "Updating obsoleted messages..." . PHP_EOL);
     if (empty($obsolete)) {
         $this->stdout("Nothing obsoleted!...skipped." . PHP_EOL);
     } else {
         if ($removeUnused) {
             $db->createCommand()->delete($sourceMessageTable, ['in', 'id', $obsolete])->execute();
             $this->stdout("deleted." . PHP_EOL);
         } else {
             $db->createCommand()->update($sourceMessageTable, ['message' => new \yii\db\Expression("CONCAT('@@',message,'@@')")], ['in', 'id', $obsolete])->execute();
             $this->stdout("updated." . PHP_EOL);
         }
     }
     // ------------------------------ COUNTER ------------------------------
     $counter = ['new' => 0, 'obsolete' => 0];
     foreach ($new as $msgs) {
         $counter['new'] += count($msgs);
     }
     foreach ($obsolete as $msgs) {
         $counter['obsolete'] += count($msgs);
     }
     return $counter;
 }