fix save with habtm returning false

This commit is contained in:
Haithem BEN GHORBAL 2014-05-28 18:17:16 +02:00
parent 2546b79c62
commit a8e410ee20
2 changed files with 22 additions and 18 deletions

View file

@ -1784,7 +1784,7 @@ class Model extends Object implements CakeEventListener {
if (empty($this->data[$this->alias][$this->primaryKey])) { if (empty($this->data[$this->alias][$this->primaryKey])) {
unset($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) { foreach ($this->data as $n => $v) {
if (isset($this->hasAndBelongsToMany[$n])) { if (isset($this->hasAndBelongsToMany[$n])) {
@ -1843,24 +1843,26 @@ class Model extends Object implements CakeEventListener {
} }
} }
if (!empty($joined) && $success === true) { if ($success) {
$this->_saveMulti($joined, $this->id, $db); if (!empty($joined)) {
} $this->_saveMulti($joined, $this->id, $db);
} else if ($count === 0) {
if ($success && $count === 0) { $success = false;
$success = false;
}
if ($success && $count > 0) {
if (!empty($this->data)) {
if ($created) {
$this->data[$this->alias][$this->primaryKey] = $this->id;
}
} }
}
if ($options['callbacks'] === true || $options['callbacks'] === 'after') { if ($success) {
$event = new CakeEvent('Model.afterSave', $this, array($created, $options)); if ($count > 0) {
$this->getEventManager()->dispatch($event); 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 (!empty($this->data)) { if (!empty($this->data)) {

View file

@ -1824,7 +1824,9 @@ class ModelWriteTest extends BaseModelTest {
$data = array('Item' => array('Item' => array(1, 2))); $data = array('Item' => array('Item' => array(1, 2)));
$TestModel->id = 2; $TestModel->id = 2;
$TestModel->save($data); $result = $TestModel->save($data);
$this->assertTrue((bool)$result);
$result = $TestModel->findById(2); $result = $TestModel->findById(2);
$result['Item'] = Hash::sort($result['Item'], '{n}.id', 'asc'); $result['Item'] = Hash::sort($result['Item'], '{n}.id', 'asc');
$expected = array( $expected = array(