activerecord - Subsonic 3.0.0.4 active record templates for mysql not returning last inserted id -
steps reproduce error:
create table person ( person_id int(11) not null auto_increment, firstname varchar(20) default null, lastname varchar(20) default null, age int(11) default '0', primary key (person_id) ) engine=innodb auto_increment=36 default charset=latin1
insert person(firstname,lastname,age) values ('myname',null,null) ;select last_insert_id() newid
person personobject = new person(); personobject.firstname= "myname"; personobject.add(); response.write(personobject.personid); output is"0'
this not bug rather error happen if change naming convention of columns , tables -> topascalcase. default column/table name copied way defined on mysql database. makes ugly
original
person personobject = new person() personobject .person_id = 1; personobject .first_name = "hello"; personobject .save(); what happen
person personobject = new person() personobject.personid = 1; personobject.firstname = "hello"; personobject.save(); there two(~3, can't remember now) major issues subsonic core after changing default template generate following names using subsonic's inflector class.
reflection properties required updates/inserts must changed example:
//from item.gettype().getproperty(tbl.primarykey.name); //to item.gettype().getproperty(inflector.topascalcase(tbl.primarykey.name)); column names should returned original property when doing inserts example:
//from getcolumn(key) //to getcolumn(inflector.addunderscores(key))
Comments
Post a Comment