$value = $obj->$thing Autoload Technique: thing -> what it does in english => what it does in code --------------------------------------------------------------------------- col -> add a 'col' entry, returns value of col => OBJ::Add_Col('col','col') col_id -> add a 'cols' entry, returns instance from col table -> add a 'col_id' entry, returns value of col_id => OBJ::Add_Col(plural('col'),'col_id','col','col_id') => OBJ::Add_Col('col_id','col_id') name_col_id -> add a 'names' entry, returns instance from col table -> add a 'name_col_id' entry, returns value of name_col_id => OBJ::Add_Col(plural('name'),'name_col_id','col','col_id') => OBJ::Add_Col('name_col_id','name_col_id') By-Hand Version: Class::add_col($name, $local_col, $foreign_table, $foreign_col) $foreign_table and $foreign_col are optional. If they are specified then a has_a relationship is set up for Class, and a has_many relationship is set up on the foreign class. Since 'has_one' and 'might_have' and such aren't part of boring SQL, we don't care about them either and don't mess with them. That sort of thing can be dealt with some other way, I believe.