/** * @param \DatabaseExporterImporter\Entity\Table $table * @param \DatabaseExporterImporter\Entity\DataColumn[] $values * @return int * @throws \RuntimeException */ protected function insertRecord(Table $table, array $values) { $sqlValues = []; foreach ($values as $value) { $sqlValues[$value->getName()] = $value->getValue(); } $statement = $this->connection->prepare('INSERT INTO ' . $table->getName() . ' (' . implode(', ', array_keys($sqlValues)) . ') ' . 'VALUES(' . substr(str_repeat('?, ', count($sqlValues)), 0, -2) . ')'); if (false === $statement->execute(array_values($sqlValues))) { $errors = $statement->errorInfo(); throw new \RuntimeException($errors[2]); } return $this->connection->lastInsertId(); }
/** * @param \DatabaseExporterImporter\Entity\Table $table * @throws \RuntimeException * @return array */ protected function getTableData(Table $table) { $sql = 'SELECT * FROM ' . $table->getName() . ' WHERE '; $sqlAndParts = ['1 = 1']; $queryParams = []; if (null !== $this->primaryTableName) { if ($table->getName() === $this->primaryTableName) { $sqlAndParts[] = $this->primaryKeyColumn . ' = :value'; $queryParams[':value'] = $this->primaryKey; } else { foreach ($this->foreignValueProvider->setTable($table)->setTables($this->tables)->getForeignKeyValues() as $columnName => $columnValues) { $conditionValuesStubs = []; foreach ((array) $columnValues as $counter => $columnValue) { $conditionValuesStubs[] = ':' . $columnName . $counter; $queryParams[':' . $columnName . $counter] = $columnValue; } $sqlAndParts[] = $columnName . ' IN(' . implode(', ', $conditionValuesStubs) . ')'; } } } return $this->getQueryResult($sql . implode(' AND ', $sqlAndParts), $queryParams); }
public function test() { $tableName = mt_rand(); $subject = new Table($tableName); static::assertSame($tableName, $subject->getName()); static::assertCount(0, $subject->getColumns()); $columnName = mt_rand(); $column = new Column($columnName); $subject->addColumn($column); static::assertCount(1, $subject->getColumns()); $firstColumn = reset($subject->getColumns()); static::assertSame($columnName, $firstColumn->getName()); $dataRow = new DataRow(); static::assertCount(0, $subject->getDataRows()); $subject->addDataRow($dataRow); static::assertCount(1, $subject->getDataRows()); }