Skip to content

Commit

Permalink
fix save with habtm returning false
Browse files Browse the repository at this point in the history
  • Loading branch information
Haititi committed May 28, 2014
1 parent 2546b79 commit a8e410e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
32 changes: 17 additions & 15 deletions lib/Cake/Model/Model.php
Expand Up @@ -1784,7 +1784,7 @@ public function save($data = null, $validate = true, $fieldList = array()) {
if (empty($this->data[$this->alias][$this->primaryKey])) {
unset($this->data[$this->alias][$this->primaryKey]);
}
$fields = $values = array();
$joined = $fields = $values = array();

foreach ($this->data as $n => $v) {
if (isset($this->hasAndBelongsToMany[$n])) {
Expand Down Expand Up @@ -1843,24 +1843,26 @@ public function save($data = null, $validate = true, $fieldList = array()) {
}
}

if (!empty($joined) && $success === true) {
$this->_saveMulti($joined, $this->id, $db);
}

if ($success && $count === 0) {
$success = false;
if ($success) {
if (!empty($joined)) {
$this->_saveMulti($joined, $this->id, $db);
} else if ($count === 0) {
$success = false;
}
}

if ($success && $count > 0) {
if (!empty($this->data)) {
if ($created) {
$this->data[$this->alias][$this->primaryKey] = $this->id;
if ($success) {
if ($count > 0) {
if (!empty($this->data)) {
if ($created) {
$this->data[$this->alias][$this->primaryKey] = $this->id;
}
}
}

if ($options['callbacks'] === true || $options['callbacks'] === 'after') {
$event = new CakeEvent('Model.afterSave', $this, array($created, $options));
$this->getEventManager()->dispatch($event);
if ($options['callbacks'] === true || $options['callbacks'] === 'after') {
$event = new CakeEvent('Model.afterSave', $this, array($created, $options));
$this->getEventManager()->dispatch($event);
}
}

if (!empty($this->data)) {
Expand Down
4 changes: 3 additions & 1 deletion lib/Cake/Test/Case/Model/ModelWriteTest.php
Expand Up @@ -1824,7 +1824,9 @@ public function testSaveHabtmNoPrimaryData() {

$data = array('Item' => array('Item' => array(1, 2)));
$TestModel->id = 2;
$TestModel->save($data);
$result = $TestModel->save($data);
$this->assertTrue((bool)$result);

$result = $TestModel->findById(2);
$result['Item'] = Hash::sort($result['Item'], '{n}.id', 'asc');
$expected = array(
Expand Down

0 comments on commit a8e410e

Please sign in to comment.