Airship\Engine\Database::insertGet PHP Метод

insertGet() публичный метод

Insert a new record then get a particular field from the new row
public insertGet ( string $table, array $map, string $field ) : mixed
$table string
$map array
$field string The field name to return of the new entry
Результат mixed
    public function insertGet(string $table, array $map, string $field)
    {
        if ($this->insert($table, $map)) {
            $post = [];
            $params = [];
            foreach ($map as $i => $v) {
                // Escape the identifier to prevent stupidity
                $i = $this->escapeIdentifier($i);
                if ($v === null) {
                    $post[] = " {$i} IS NULL ";
                } elseif ($v === true) {
                    $post[] = " {$i} = TRUE ";
                } elseif ($v === false) {
                    $post[] = " {$i} = FALSE ";
                } elseif (\is_array($v)) {
                    throw new \TypeError(\trk('errors.database.array_passed'));
                } else {
                    // We use prepared statements for handling the users' data
                    $post[] = " {$i} = ? ";
                    $params[] = $v;
                }
            }
            $conditions = \implode(' AND ', $post);
            // We want the latest value:
            switch ($this->dbengine) {
                case 'mysql':
                    $limiter = ' ORDER BY ' . $this->escapeIdentifier($field) . ' DESC LIMIT 0, 1 ';
                    break;
                case 'pgsql':
                    $limiter = ' ORDER BY ' . $this->escapeIdentifier($field) . ' DESC OFFSET 0 LIMIT 1 ';
                    break;
                default:
                    $limiter = '';
            }
            $query = 'SELECT ' . $this->escapeIdentifier($field) . ' FROM ' . $this->escapeIdentifier($table) . ' WHERE ' . $conditions . $limiter;
            return $this->single($query, $params);
        } else {
            throw new DBAlert\DBException(\trk('errors.database.insert_failed', $table, $this->pdo->errorInfo()[2]));
        }
    }

Usage Example

Пример #1
0
 /**
  * We're storing metadata about a package in the database.
  *
  * @param TreeUpdate $update
  * @param int $treeUpdateID
  */
 protected function updatePackageQueue(TreeUpdate $update, int $treeUpdateID)
 {
     $packageId = $this->db->cell('SELECT
               packageid 
          FROM
               airship_package_cache
          WHERE 
              packagetype = ?
              AND supplier = ?
              AND name = ? 
         ', $update->getPackageType(), $update->getSupplierName(), $update->getPackageName());
     if (empty($packageId)) {
         $packageId = $this->db->insertGet('airship_package_cache', ['packagetype' => $update->getPackageType(), 'supplier' => $update->getSupplierName(), 'name' => $update->getPackageName()], 'packageid');
     }
     $data = $update->getNodeData();
     $this->db->insert('airship_package_versions', ['package' => $packageId, 'version' => $data['version'], 'checksum' => $data['checksum'], 'commithash' => $data['commit'] ?? null, 'date_released' => $data['date_released'], 'treeupdateid' => $treeUpdateID]);
 }