Permalink
Browse files

Fix foreach error when useTable = false.

When calling model->create() with useTable = false, an error should not
be triggered.

Fixes #3480
  • Loading branch information...
1 parent d70730d commit 08cde9f5a2dec46422db058e682ca4e872aae71b @markstory markstory committed Dec 20, 2012
Showing with 17 additions and 4 deletions.
  1. +3 −4 lib/Cake/Model/Model.php
  2. +14 −0 lib/Cake/Test/Case/Model/ModelIntegrationTest.php
@@ -1304,10 +1304,8 @@ public function schema($field = false) {
if ($this->useTable !== false && (!is_array($this->_schema) || $field === true)) {
$db = $this->getDataSource();
$db->cacheSources = ($this->cacheSources && $db->cacheSources);
- if (method_exists($db, 'describe') && $this->useTable !== false) {
+ if (method_exists($db, 'describe')) {
$this->_schema = $db->describe($this);
- } elseif ($this->useTable === false) {
- $this->_schema = array();
}
}
if (is_string($field)) {
@@ -1477,7 +1475,8 @@ public function create($data = array(), $filterKey = false) {
$this->validationErrors = array();
if ($data !== null && $data !== false) {
- foreach ($this->schema() as $field => $properties) {
+ $schema = (array)$this->schema();
+ foreach ($schema as $field => $properties) {
if ($this->primaryKey !== $field && isset($properties['default']) && $properties['default'] !== '') {
$defaults[$field] = $properties['default'];
}
@@ -907,6 +907,20 @@ public function testSchema() {
}
/**
+ * Check schema() on a model with useTable = false;
+ *
+ * @return void
+ */
+ public function testSchemaUseTableFalse() {
+ $model = new TheVoid();
+ $result = $model->schema();
+ $this->assertNull($result);
+
+ $result = $model->create();
+ $this->assertEmpty($result);
+ }
+
+/**
* data provider for time tests.
*
* @return array

0 comments on commit 08cde9f

Please sign in to comment.