Re: DB_DataObject_FormBuilder and crossLinkExtraFields
| From: | Justin Patrin | Date: | Sat, 23 Sep 2006 06:53:06 +0000 |
| Subject: | Re: DB_DataObject_FormBuilder and crossLinkExtraFields | ||
| References: | 1 2 3 4 5 | Groups: | php.pear.general |
| Request: | Send a blank email to pear-general+get-25220@lists.php.net to get a copy of this message | ||
On 9/22/06, James Stewart <lists@jystewart.net> wrote:
On Sep 22, 2006, at 9:10 PM, Ian Warner wrote: James Stewart wrote:Well, line 3006 of FormBuilder.php calls processForm on a sub-FB instance for the crossLink-ed record so the normal FB algorithm is used for insert vs. update. Try creating a DO manually for a record in that table then calling $pk = DB_DataObject_FormBuilder::_getPrimaryKey($do) and seeing what's in $pk. If this shows the expected output ("id") then try manually creating an FB and setting it up to edit the record (note: pearified/DB_DataObject_FormBuilder_Frontend can be used to browse/edit all data in any DOs :-). -- Justin PatrinShould also be underneath this : [conference_session_time_slot__keys] id = N Also check for spelling mistakes in keys and fields if hand done - this has got me a a few times. It was auto-generated, and the keys entry is as shown.On Sep 22, 2006, at 7:48 PM, Justin Patrin wrote:On 9/22/06, James Stewart <lists@jystewart.net> wrote:<snip>It's definitely declared as a primary key in the schema and the DO seems to have picked it up. Is there somewhere else I should be declaring it? The table definition is (I'm using MySQL): ------ CREATE TABLEThat generates a form with checkboxes for each time slot, and a select list of venues for each time slot. When I add a session to a new time slot everything works fine, with an entry being created for the appropriate time slot and location, but when I try to alter a location for an already selected time slot the update isn't completed and DB_DO_FB attempts to insert a new value in the database for just the location. eg. DataObjects_Conference_session_time_slot: QUERY: INSERT INTO conference_session_time_slot (location ) VALUES ( 6 ) where 6 is the value of the location I want to change to, but I expect something like: UPDATE conference_session_time_slot SET location = 6 WHERE id = X Looking through the code I can't see where DB_DO_FB actually works out which updates it's supposed to make for extra fields, so I'm not sure where to go next. Anyone got any ideas?Almost certainly you didn't set up your primary key on the conference_session_time_slot correctly.conference_session_time_slot(idint(11) NOT NULL auto_increment,session_idint(11) default NULL,time_slotint(11) NOT NULL default '0',locationint(11) default NULL, PRIMARY KEY (id) ) TYPE=MyISAM; ------ The do's .ini file holds: ------ [conference_session_time_slot] id = 129 session_id = 129 time_slot = 129 location = 1 ------