On Sat, Mar 12, 2011 at 12:12 AM, Ryan Schmidt <google-2...@ryandesign.com> wrote: > > On Mar 9, 2011, at 09:29, Tilen Majerle wrote: > >> because of _id, if you connect 2 models, then they are connected with >> modelalias_id in other controller so like that >> >> POST model (hasMany Comment) >> posts table: >> >> id, >> title, >> created, >> modified, >> ...other rows in table >> >> COMMENT model (belongsTo Post) >> comments table: >> >> id, >> post_id //connected with post model, but you have _ident >> created, >> modified, >> ... all other rows... >> >> >> i Hope you understan > > I do not understand. Surely "_id" is only a suffix -- used only at the end of > a column name. Why then is it being abused by CakePHP in the middle of a > column name?
Yes, looks like a regexp bug. It should use '_id$', I think. ... nope. It's not a regexp. In 1.3.7, console/libs/tasks/model.php, line 502: function findBelongsTo(&$model, $associations) { $fields = $model->schema(true); foreach ($fields as $fieldName => $field) { $offset = strpos($fieldName, '_id'); if ($fieldName != $model->primaryKey && $fieldName != 'parent_id' && $offset !== false) { $tmpModelName = $this->_modelNameFromKey($fieldName); $associations['belongsTo'][] = array( 'alias' => $tmpModelName, 'className' => $tmpModelName, 'foreignKey' => $fieldName, ); } elseif ($fieldName == 'parent_id') { $associations['belongsTo'][] = array( 'alias' => 'Parent' . $model->name, 'className' => $model->name, 'foreignKey' => $fieldName, ); } } return $associations; } Using strpos like this is no good because the actual position is being ignored. It's simply checking to see if itoccurs at all somewhere. A better approach would be to use a regexp to test it's at the end of the string. foreach ($fields as $fieldName => $field) { if ($fieldName != $model->primaryKey && $fieldName != 'parent_id' && preg_match('/.+_id$/', $fieldName)) { Untested, but it should not match a column with "_id" anywhere but the end of the name. It should also not match columns named "_id". heohni, perhaps you could make a copy of the file and try baking again with the above mod. If it works, feel free to file a bug and suggest my fix. https://launchpad.net/bugs/bugtrackers/cake-trac -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php