Browse Source

Only bake HABTM associations for tables that exist.

bake often guesses wrong when it comes to habtm. Only add associations
we're highly confident of. This includes tables where the foreign table
also exists.

Refs #3532
mark_story 13 years ago
parent
commit
0ed9e3c120
1 changed files with 6 additions and 10 deletions
  1. 6 10
      lib/Cake/Console/Command/Task/ModelTask.php

+ 6 - 10
lib/Cake/Console/Command/Task/ModelTask.php

@@ -621,6 +621,7 @@ class ModelTask extends BakeTask {
 	public function findHasAndBelongsToMany(Model $model, $associations) {
 		$foreignKey = $this->_modelKey($model->name);
 		foreach ($this->_tables as $otherTable) {
+			$tableName = null;
 			$tempOtherModel = $this->_getModelObject($this->_modelName($otherTable), $otherTable);
 			$modelFieldsTemp = $tempOtherModel->schema(true);
 
@@ -628,17 +629,12 @@ class ModelTask extends BakeTask {
 			$otherOffset = strpos($otherTable, '_' . $model->table);
 
 			if ($offset === 0) {
-				$offset = strlen($model->table . '_');
-				$habtmName = $this->_modelName(substr($otherTable, $offset));
-				$associations['hasAndBelongsToMany'][] = array(
-					'alias' => $habtmName,
-					'className' => $habtmName,
-					'foreignKey' => $foreignKey,
-					'associationForeignKey' => $this->_modelKey($habtmName),
-					'joinTable' => $otherTable
-				);
+				$tableName = substr($otherTable, strlen($model->table . '_'));
 			} elseif ($otherOffset === 0) {
-				$habtmName = $this->_modelName(substr($otherTable, 0, $otherOffset));
+				$tableName = substr($otherTable, 0, $otherOffset);
+			}
+			if ($tableName && in_array($tableName, $this->_tables)) {
+				$habtmName = $this->_modelName($tableName);
 				$associations['hasAndBelongsToMany'][] = array(
 					'alias' => $habtmName,
 					'className' => $habtmName,