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

View file

@ -1824,7 +1824,9 @@ class ModelWriteTest extends BaseModelTest {
$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(