1
0
mirror of https://github.com/dg/dibi.git synced 2025-10-22 10:16:02 +02:00

- BC change: DibiResult::fetchAll() returns always multidimensional arrays (for single columns use fetchPairs() instead)

- added DibiTable::insertOrUpdate()
- new modifier %by
This commit is contained in:
David Grudl
2008-10-01 16:04:16 +00:00
parent 9b84459f09
commit 9eddba204f
9 changed files with 102 additions and 44 deletions

View File

@@ -162,9 +162,15 @@ abstract class DibiTable extends DibiObject
*/
public function update($where, $data)
{
$data = $this->prepare($data);
if ($where === NULL && isset($data[$this->primary])) {;
$where = $data[$this->primary];
unset($data[$this->primary]);
}
$this->connection->query(
'UPDATE %n', $this->name,
'SET %a', $this->prepare($data),
'SET %a', $data,
'WHERE %n', $this->primary, 'IN (' . $this->primaryModifier, $where, ')'
);
return $this->connection->affectedRows();
@@ -172,6 +178,36 @@ abstract class DibiTable extends DibiObject
/**
* Inserts or updates rows in a table.
* @param array|object
* @return int (new) primary key
*/
public function insertOrUpdate($data)
{
$data = $this->prepare($data);
if (!isset($data[$this->primary])) {
throw new InvalidArgumentException("Missing primary key '$this->primary' in dataset.");
}
try {
$this->connection->query(
'INSERT INTO %n', $this->name, '%v', $data
);
} catch (DibiDriverException $e) {
$where = $data[$this->primary];
unset($data[$this->primary]);
$this->connection->query(
'UPDATE %n', $this->name,
'SET %a', $data,
'WHERE %n', $this->primary, 'IN (' . $this->primaryModifier, $where, ')'
);
}
}
/**
* Deletes rows from a table by primary key.
* @param mixed primary key value(s)