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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user