Skip to content
Snippets Groups Projects
Commit 975ca162 authored by Elmar Ludwig's avatar Elmar Ludwig
Browse files

mark cloned objects as new, fixes #3398

Closes #3398

Merge request studip/studip!2315
parent 5cc4665b
No related branches found
No related tags found
No related merge requests found
...@@ -640,6 +640,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate ...@@ -640,6 +640,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
$ret = []; $ret = [];
do { do {
$clone = clone $record; $clone = clone $record;
$clone->setNew(false);
$stmt->setFetchMode(PDO::FETCH_INTO, $clone); $stmt->setFetchMode(PDO::FETCH_INTO, $clone);
if ($clone = $stmt->fetch()) { if ($clone = $stmt->fetch()) {
...@@ -694,6 +695,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate ...@@ -694,6 +695,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
$ret = []; $ret = [];
do { do {
$clone = clone $record; $clone = clone $record;
$clone->setNew(false);
$st->setFetchMode(PDO::FETCH_INTO, $clone); $st->setFetchMode(PDO::FETCH_INTO, $clone);
if ($clone = $st->fetch()) { if ($clone = $st->fetch()) {
...@@ -719,10 +721,6 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate ...@@ -719,10 +721,6 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
$sql = "WHERE {$sql}"; $sql = "WHERE {$sql}";
} }
$class = get_called_class();
$record = new $class();
$record->setNew(false);
$db_table = static::db_table(); $db_table = static::db_table();
$st = DBManager::get()->prepare("SELECT `{$db_table}`.* FROM `{$db_table}` {$sql}"); $st = DBManager::get()->prepare("SELECT `{$db_table}`.* FROM `{$db_table}` {$sql}");
$st->execute($params); $st->execute($params);
...@@ -735,6 +733,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate ...@@ -735,6 +733,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
$ret = 0; $ret = 0;
do { do {
$clone = clone $record; $clone = clone $record;
$clone->setNew(false);
$st->setFetchMode(PDO::FETCH_INTO, $clone); $st->setFetchMode(PDO::FETCH_INTO, $clone);
if ($clone = $st->fetch()) { if ($clone = $st->fetch()) {
...@@ -1045,6 +1044,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate ...@@ -1045,6 +1044,7 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
*/ */
function __clone() function __clone()
{ {
$this->setNew(true);
//all references link still to old object => reset all aliases //all references link still to old object => reset all aliases
foreach ($this->alias_fields() as $alias => $field) { foreach ($this->alias_fields() as $alias => $field) {
if (isset($this->db_fields()[$field])) { if (isset($this->db_fields()[$field])) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment