Permalink
Browse files

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
  • Loading branch information...
markstory committed Jan 16, 2013
1 parent eff4004 commit 0ed9e3c120aff65839ef16d315a3d2cd93515873
Showing with 6 additions and 10 deletions.
  1. +6 −10 lib/Cake/Console/Command/Task/ModelTask.php
@@ -621,24 +621,20 @@ public function findHasOneAndMany(Model $model, $associations) {
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);
$offset = strpos($otherTable, $model->table . '_');
$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,

1 comment on commit 0ed9e3c

@renatorib

This comment has been minimized.

Show comment
Hide comment
@renatorib

renatorib commented on 0ed9e3c Jan 16, 2013

👍

Please sign in to comment.