public function insertEntity($entity, $mapper) { $insertStmt = QueryBuilder::buildInsertQuery($entity, $mapper); $values = array(); $affectedRows = 0; foreach ($mapper->getPropertys() as $property) { if ($property->getColumn() != "id") { $method = "get" . $property->getName(); $values[":" . $property->getColumn()] = $entity->{$method}(); } } try { /* begin transac */ $this->getDataSource()->beginTransaction(); /* insert */ $id = $this->getDataSource()->insertSingleRow($insertStmt, $values); if ($id != 0) { $affectedRows += 1; } $entity->setId($id); /* relations */ foreach ($mapper->getRelations() as $relation) { $insertRelStmt = QueryBuilder::buildRelationQuery($entity, $relation); $valuesUpt = array(); $m = "get" . $relation->getName(); $getid = "getId"; foreach ($entity->{$m}() as $rel) { $valueRow = array(); $valueRow[":" . $relation->getLocalColumn()] = $entity->{$getid}(); $valueRow[":" . $relation->getForeignColumn()] = $rel->{$getid}(); $valuesUpt[] = $valueRow; } $this->getDataSource()->insertMultipleRow($insertRelStmt, $valuesUpt); } /* end transaction */ $this->getDataSource()->commitTransaction(); } catch (PDOException $e) { $this->getDataSource()->rollbackTransaction(); } return $affectedRows; }
function doInsert($entity, $mapper) { $statement = QueryBuilder::buildInsertQuery($entity, $mapper); $stmt = $this->getConnection()->prepare($statement); foreach ($mapper->getPropertys() as $property) { if ($property->getColumn() != "id") { $method = "get" . $property->getName(); $stmt->bindParam(":" . $property->getColumn(), $entity->{$method}()); } } $affectedRows = $stmt->execute(); return $affectedRows; }