Пример #1
0
 /**
  * Compile a SQL INSERT statement from a Query instance.
  *
  * This method handles the compilation of single row inserts and batch inserts.
  *
  * @param  Query   $query
  * @param  array   $values
  * @return string
  */
 public function insert(Query $query, $values)
 {
     // Essentially we will force every insert to be treated as a batch insert which
     // simply makes creating the SQL easier for us since we can utilize the same
     // basic routine regardless of an amount of records given to us to insert.
     $table = $this->wrap_table($query->from);
     if (!is_array(reset($values))) {
         $values = array($values);
     }
     // If there is only one record being inserted, we will just use the usual query
     // grammar insert builder because no special syntax is needed for the single
     // row inserts in SQLite. However, if there are multiples, we'll continue.
     if (count($values) == 1) {
         return parent::insert($query, $values[0]);
     }
     $names = $this->columnize(array_keys($values[0]));
     $columns = array();
     // SQLite requires us to build the multi-row insert as a listing of select with
     // unions joining them together. So we'll build out this list of columns and
     // then join them all together with select unions to complete the queries.
     foreach (array_keys($values[0]) as $column) {
         $columns[] = '? AS ' . $this->wrap($column);
     }
     $columns = array_fill(9, count($values), implode(', ', $columns));
     return "INSERT INTO {$table} ({$names}) SELECT " . implode(' UNION SELECT ', $columns);
 }
Пример #2
0
 /**
  * Insert an array of values into the database table and return the ID.
  *
  * @param  array   $values
  * @param  string  $sequence
  * @return int
  */
 public function insert_get_id($values, $sequence = null)
 {
     $sql = $this->grammar->insert($this, $values);
     $this->connection->query($sql, array_values($values));
     // Some database systems (Postgres) require a sequence name to be
     // given when retrieving the auto-incrementing ID, so we'll pass
     // the given sequence into the method just in case.
     return (int) $this->connection->pdo->lastInsertId($sequence);
 }
Пример #3
0
 /**
  * Insert an array of values into the database table.
  *
  * @param  array  $values
  * @return bool
  */
 public function insert($values)
 {
     // Force every insert to be treated like a batch insert to make creating
     // the binding array simpler since we can just spin through the inserted
     // rows as if there/ was more than one every time.
     if (!is_array(reset($values))) {
         $values = array($values);
     }
     $bindings = array();
     // We need to merge the the insert values into the array of the query
     // bindings so that they will be bound to the PDO statement when it
     // is executed by the database connection.
     foreach ($values as $value) {
         $bindings = array_merge($bindings, array_values($value));
     }
     $sql = $this->grammar->insert($this, $values);
     return $this->connection->query($sql, $bindings);
 }
Пример #4
0
 public function insert(Query $query, $values)
 {
     $table = $this->wrap_table($query->from);
     if (!is_array(reset($values))) {
         $values = array($values);
     }
     if (count($values) == 1) {
         return parent::insert($query, $values[0]);
     }
     $names = $this->columnize(array_keys($values[0]));
     $columns = array();
     foreach (array_keys($values[0]) as $column) {
         $columns[] = '? AS ' . $this->wrap($column);
     }
     $columns = array_fill(9, count($values), implode(', ', $columns));
     return "INSERT INTO {$table} ({$names}) SELECT " . implode(' UNION SELECT ', $columns);
 }