/** * @param \Notadd\Foundation\Database\Query\Builder $query * @param array $values * @return string */ public function compileInsert(Builder $query, array $values) { $table = $this->wrapTable($query->from); if (!is_array(reset($values))) { $values = [$values]; } if (count($values) == 1) { return parent::compileInsert($query, reset($values)); } $names = $this->columnize(array_keys(reset($values))); $columns = []; foreach (array_keys(reset($values)) as $column) { $columns[] = '? as ' . $this->wrap($column); } $columns = array_fill(0, count($values), implode(', ', $columns)); return "insert into {$table} ({$names}) select " . implode(' union all select ', $columns); }
/** * @param array $values * @return bool */ public function insert(array $values) { if (empty($values)) { return true; } if (!is_array(reset($values))) { $values = [$values]; } else { foreach ($values as $key => $value) { ksort($value); $values[$key] = $value; } } $bindings = []; foreach ($values as $record) { foreach ($record as $value) { $bindings[] = $value; } } $sql = $this->grammar->compileInsert($this, $values); $bindings = $this->cleanBindings($bindings); return $this->connection->insert($sql, $bindings); }