Jessica Posted February 9, 2011 Share Posted February 9, 2011 Has anyone here used the ADOdb Active Record implementation? http://phplens.com/lens/adodb/docs-active-record.htm I'm trying to use the ClassHasMany option to automatically load children. But it's not working. I have ClassBelongsTo on another class and it works fine, but this one is not working. I think the problem might lie with the primary key - foreign key relationships. My parent table: CREATE TABLE IF NOT EXISTS `grids` ( `grid_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `x` int(11) NOT NULL, `y` int(11) NOT NULL, `location_id` int(11) NOT NULL, `city_id` int(10) unsigned DEFAULT NULL, `nation_id` int(10) unsigned DEFAULT NULL, `continent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`grid_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Dumping data for table `grids` -- INSERT INTO `grids` (`grid_id`, `x`, `y`, `location_id`, `city_id`, `nation_id`, `continent_id`) VALUES (1, 10, 10, 1, 1, 1, 1), (2, 10, 9, 1, 1, 1, 1); The child table CREATE TABLE IF NOT EXISTS `beasts` ( `beast_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `beast_type_id` int(10) unsigned NOT NULL, `max_hp` int(10) unsigned NOT NULL, `current_hp` int(10) unsigned NOT NULL, `grid_id` int(10) unsigned NOT NULL, PRIMARY KEY (`beast_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- Dumping data for table `beasts` -- INSERT INTO `beasts` (`beast_id`, `beast_type_id`, `max_hp`, `current_hp`, `grid_id`) VALUES (1, 1, 10, 10, 1), (2, 2, 5, 5, 1), (3, 1, 10, 10, 2), (4, 2, 5, 5, 2); The Class definitions <?php Class Grid Extends ADOdb_Active_Record{ } //This line is commented out because it didn't seem to help the problem, but I have tried it with it uncommented. I have also tried with only this one and not the Class one. //ADODB_Active_Record::TableKeyHasMany('Grids', 'grid_id', 'Beasts', 'grid_id') ADODB_Active_Record::ClassHasMany('Grid', 'Beast','grid_id'); Class Beast Extends ADOdb_Active_Record{ function __toString(){ return $this->Beast_Type->beast_type; } } //This one actually works. If I load a beast, the beast type does show up. ADODB_Active_Record::ClassBelongsTo('Beast','Beast_Type','beast_type_id'); ?> The php code I run <?php $grid = new Grid(); $grid->load('grid_id=?', 1); var_dump($grid); var_dump($grid->Beast); $beast = new Beast(); I've tried $grid->Beast, ->Beasts, ->beast, and ->beasts. Nothing is in any of them. $grid does have the right data: object(Grid)[40] public '_dbat' => int 0 public '_table' => string 'Grids' (length=5) public '_tableat' => string 'Grids' (length=5) public '_where' => string 'grid_id=?' (length=9) public '_saved' => boolean true public '_lasterr' => boolean false public '_original' => array 0 => string '1' (length=1) 1 => string '10' (length=2) 2 => string '10' (length=2) 3 => string '1' (length=1) 4 => string '1' (length=1) 5 => string '1' (length=1) 6 => string '1' (length=1) public 'foreignName' => string 'grid' (length=4) public 'grid_id' => string '1' (length=1) public 'x' => string '10' (length=2) public 'y' => string '10' (length=2) public 'location_id' => string '1' (length=1) public 'city_id' => string '1' (length=1) public 'nation_id' => string '1' (length=1) public 'continent_id' => string '1' (length=1) array empty Help? Thanks! Link to comment https://forums.phpfreaks.com/topic/227166-adodb-active-record-classhasmany/ Share on other sites More sharing options...
Jessica Posted February 9, 2011 Author Share Posted February 9, 2011 Well, it looks like now the Beast_Type part isn't working either. So...something is wrong with these both. Link to comment https://forums.phpfreaks.com/topic/227166-adodb-active-record-classhasmany/#findComment-1171858 Share on other sites More sharing options...
Jessica Posted February 9, 2011 Author Share Posted February 9, 2011 Okay, I got the beast to beast type (belongs to) part working again. I think it did have to do with the ids not being "id". This seems to have solved it. ADODB_Active_Record::TableKeyBelongsTo('beasts', 'beast_id', 'beast_types', 'beast_type_id', 'beast_type_id'); ADODB_Active_Record::ClassBelongsTo('Beast','Beast_Type','beast_type_id','beast_type_id'); The order seems to be important. Hopefully if anyone else runs into this trouble, this will help you solve it. Link to comment https://forums.phpfreaks.com/topic/227166-adodb-active-record-classhasmany/#findComment-1171874 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.