Adding support for MySQL REPLACE operator
Notice: This thread is very old.
- ivanscm
- Member | 16
In one of the projects on the Nette Framework I needed support for MySQL REPLACE operator level framework.
For this, I added the following:
“Nette\Database\Table\Selection.php”
public function replace($data)
{
if ($data instanceof Selection) {
$data = $data->getSql();
} elseif ($data instanceof \Traversable) {
$data = iterator_to_array($data);
}
$return = $this->connection->query($this->sqlBuilder->buildReplaceQuery(), $data);
$this->checkReferenced = TRUE;
if (!is_array($data)) {
return $return->rowCount();
}
if (!is_array($this->primary) && !isset($data[$this->primary]) && ($id = $this->connection->lastInsertId($this->getPrimarySequence()))) {
$data[$this->primary] = $id;
}
$row = $this->createRow($data);
if ($signature = $row->getSignature(FALSE)) {
$this->rows[$signature] = $row;
}
return $row;
}
“Nette\Database\Table\SqlBuilder.php”
public function buildReplaceQuery()
{
return "REPLACE INTO {$this->delimitedTable}";
}
I want to say this is not a complete solution. It can be simplified and improved. Later publish a good option.
Last edited by ivanscm (2013-02-18 10:33)