[html-formfu] Having issues with nested repeatable loading from db.

Leanan Sidhe the.leanan.sidhe at gmail.com
Thu Mar 5 19:42:19 GMT 2009


Figured out my problem.  I didn't have the hidden fields count and id.

For me id actually had to be debits_item_id, instead of just id, since that
was the primary key for my debititems table.

For some reason I thought that the count and id hidden fields were just
extraneous data, not necessary.

On Thu, Mar 5, 2009 at 11:59 AM, Leanan Sidhe <the.leanan.sidhe at gmail.com>w=
rote:

> The only one that seems to be what I want is the
> many_to_many_repeatable_nested tests.
>
> I notice in there, the call to $form->model->default_values has an extra
> parameter, a hash ref of { nested_base =3D> 'foo' }.
>
> I tried adding {nested_base =3D> 'debits'} to mine, and the end result was
> that now instead of at least getting all the data in my form from the
> various might_haves, I get nothing.  The sql output also shows that it is
> not querying all the related tables at the first level, as it does when I=
 do
> not have that hash ref.  If that is the way to do it, then I am lost for =
two
> reasons:
>
> 1) I didn't even get at least my debits.debit_item.date, etc data loaded
> from the database, and all the data I WAS getting now isn't being loaded.
> 2) I have a bunch of tables that have relationships like this one (for
> instance, I have a credit and credititem table, with similar relationships
> as the debit and debititem tables as set out below).  I need to load data
> from all those as well.
> 3) I don't recall, in my reading of the docs, tests, mailing list archives
> (I have skimmed all that are listed online, and read through anything that
> seemed REMOTELY related to repeatables and loading from the db), nor been
> able to google anything that even mentions this hash ref.  All I've been
> able to come up with tells me that all I need to do is set up my schema, =
set
> up the proper relationships, make sure my field name's match the column n=
ame
> for the table I wish to load from, and make sure that my nested_names all
> match the relationship names.  Which they do.
>
> I'm at a loss here.  I do not come here asking for help without already
> haveing tried everything I can as I understand it.  I have spent days try=
ing
> to figure out what I am doing wrong.
>
> Is it my relationship type?  Should this be a many_to_many instead of a
> has_many?  Basically, an account may or may not have any debits.  If they
> do, there will be an entry in the debits table that has some basic
> information about the whole set of debits, and then there may or may not =
be
> a bunch of individual debits, each in the debititems table, that will list
> information about the individual debit.  I know it doesn't quite make sen=
se
> to say in this example that you may have a row in the debits table without
> any in the debititems table, but in my application (which is not dealing
> with accounts, debits, etc) it makes sense.  I may_have a debit, and that
> debit may have 0-x individual items associated with it.  This was the fir=
st
> example I could come with that demonstrated something similar to my
> situation, and I didn't want to use foo and bar because people tend to get
> confused when you're using such nebulous terms.
>
> On my form, I want to show the overall data for the set of debits, and th=
en
> display a table that lists all the individual debit items for that set of
> debits.  This data is editable, so I need to load it all from the db.
>
> Put it this way:  I am standing in front of a gorge, and I need to get
> across.  I have the materials to make a bridge, but I do not know how to
> make a bridge.  Everything that tells me how to make a bridge, when I try=
 to
> use it to make a bridge, ends up with a bridge that doesn't span the gorg=
e.
> I am missing some fine detail on bridge making that I need someone to poi=
nt
> out to me so that I can do it.  Telling me to look at all the instructions
> again is not of any help, since I'm obviously having problems understandi=
ng
> the instructions clearly enough to make said bridge.
>
>
> On Thu, Mar 5, 2009 at 10:09 AM, Moritz Onken <onken at houseofdesign.de>wro=
te:
>
>>
>>
>> Am 05.03.2009 um 15:40 schrieb Leanan Sidhe <the.leanan.sidhe at gmail.com>:
>>
>>
>>
>> On Thu, Mar 5, 2009 at 8:46 AM, Ascii King < <tech at swattermatter.com>
>> tech at swattermatter.com> wrote:
>>
>>> For starters, I don't think it is supposed to be "schema =3D DB", just
>>> "schema DB"
>>>
>>> <Controller::HTML::FormFu>
>>>   <model_stash>
>>>       schema DB
>>>   </model_stash>
>>> </Controller::HTML::FormFu>
>>>
>>> Also, could you show us the may_have line that sets up the 'debits'
>>> relationship?
>>
>>
>> I meant might_have, not may_have, and here it is:
>> In MyApp::DB::Result::Account :
>>
>> __PACKAGE__->might_have(
>>    'debits' =3D> 'MyApp::Schema::DB::Result::Debit',
>>   'account_id'
>> );
>>
>> Where both the Account and Debit Tables have an account_id field.  It's
>> definitely walking this relationship, because my form is loading the
>> "something" and "something_else" values.  It's just not going that extra
>> step and loading all the related debit_items for that debit.  In case you
>> are curious, that is set up like so:
>>
>> in MyApp::DB::Result::Debit :
>>
>> __PACKAGE__->has_many(
>>   'debit_items' =3D> 'MyApp::Schema::DB::Result::DebitItems',
>>   'debit_id'
>> );
>>
>> Where both Debit and DebitItems table have a debit_id column.  This is
>> where it breaks.  For my example, there is a row with debit_id 1 in Debi=
t,
>> and 3 rows in DebitItems with a debit_id of 1 that should match up.  Tho=
se
>> three rows are not being loaded from the database.  It's not even giving=
 me
>> 3 empty rows.
>>
>> Should DB in my myapp.conf be DB::Result, instead, since all my table
>> files are MyApp::Schema::DB::Result::xxx?  I've tried that, too, and it
>> doesn't seem to make a difference.
>>
>> My controller has the following:
>> sub testing :FormConfig('MyApp/myapp_base.yml') :PathPart('testing')
>> Chained('/') Args(0) {
>>   my ($self, $c) =3D @_;
>>   my $form =3D $c->stash->{'form'};
>>
>>   if ($form->submitted_and_valid) {
>>     $form->model->update([still trying to figure out what to put here but
>> my first concern is getting loading working]);
>>   } else {
>>     $form->model->default_values($c->model('DB::Account')->find(1));
>>   }
>> }
>>
>> Obviously I'll make it a bit more dynamic later on, but this is just for
>> testing purposes with some dummy data in the db.
>>
>> Please let me know if there's anything else I can tell you that would ma=
ke
>> it easier for you to figure out (except of course the original code, sin=
ce
>> that's proprietary)
>>
>> Thanks.
>>
>>
>>
>>
>>
>>>
>>> Leanan Sidhe wrote:
>>>
>>>> I'm attempting to make use of the $form->model->default_values and
>>>> $form->model->update methods.  Everything except for my repeatables are
>>>> loading from the db, and I am at a loss as to why this is.  My guess i=
s that
>>>> either 1) What I want to do cannot currently be done, or 2) I'm missing
>>>> something simple, but important.  Here's an example of what I am tryin=
g to
>>>> do:
>>>>
>>>>
>>>> I have something along the following for my tables:
>>>>
>>>> MyApp::DB::Result::Account:
>>>>  - A may_have for MyApp::DB::Result::Debit, named debits
>>>>
>>>> MyApp::DB::Result::Debit
>>>> - A belongs_to for MyApp::DB::Result::Account, named account
>>>> - A has_many for MyApp::DB::Result::DebitItems, named debit_items
>>>>
>>>> MyApp::DB::Result::DebitItems
>>>> - A belongs_to for MyApp::DB::Result::Debit, named debit
>>>>
>>>> myapp.conf has:
>>>> name MyApp
>>>> <Controller::HTML::FormFu>
>>>>  <model_stash>
>>>>    schema =3D DB
>>>>  </model_stash>
>>>> </Controller::HTML::FormFu>
>>>>
>>>> (I'm not sure if that is right.  I've tried MyApp::Model::DB, and
>>>> MyApp::Schema::DB -- Model::DB lists the connection string, Schema::DB=
 is
>>>> the one with the load_namespaces)
>>>>
>>>> My form config has a base config file that loads a bunch of sub config
>>>> files.  In one of the sub configs where I'm trying to get this working=
 I
>>>> have something like this:
>>>>
>>>> ---
>>>>  elements:
>>>>  nested_name: debits
>>>>  elements:
>>>>   - type: Block
>>>>     tag: table
>>>>        .... (lots of stuff building out the headers, etc.  Then I
>>>> finally get to the rows)
>>>>   - type: Block
>>>>     tag: tbody
>>>>     elements:
>>>>       - type: Repeatable
>>>>       nested_name: debit_items
>>>>       elements:
>>>>         - type: Block
>>>>           ... (lots of stuff building out the row I want repeated)
>>>>
>>>>
>>>>
>>>> When I load the form, I do
>>>> $form->model->default_values($c->model('DB::Account')->find(1));
>>>>
>>>> The portion of the form that is not in the repeatable section loads
>>>> fine.  I'll have things like debits.something, debits.soemthing_else (=
where
>>>> I have something and something_else columns in the debit table)  All t=
he
>>>> data for those fields loads from the database just fine.
>>>> The form builds out a table with one empty row, where the names are
>>>> debits.debit_item.value, debits.debit_item.date, etc etc (where I have=
 value
>>>> and date columns in the debititems table).  However, the fields aren't
>>>> populated from the database.
>>>>
>>>> As far as I can tell I've got everything right, but obviously I don't
>>>> because it just doesn't work.  Is this possible, or am I dreaming?  If=
 it's
>>>> possible, what am I messing up?
>>>>
>>>> Thank you!
>>>> ----------------------------------------------------------------------=
--
>>>>
>>>> _______________________________________________
>>>> HTML-FormFu mailing list
>>>>  <HTML-FormFu at lists.scsys.co.uk>HTML-FormFu at lists.scsys.co.uk
>>>>  <http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu>
>>>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>>>
>>>
>>> _______________________________________________
>>> HTML-FormFu mailing list
>>>  <HTML-FormFu at lists.scsys.co.uk>HTML-FormFu at lists.scsys.co.uk
>>>  <http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu>
>>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>>
>>
>> _______________________________________________
>> HTML-FormFu mailing list
>> HTML-FormFu at lists.scsys.co.uk
>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>
>>
>>
>> You could write a test. Have a look at the formfu model dbic test suite.
>> This will help you. There are already many defined which you can use.
>>
>> If I recall correctly I had this problem too.
>>
>> _______________________________________________
>> HTML-FormFu mailing list
>> HTML-FormFu at lists.scsys.co.uk
>> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/html-formfu/attachments/20090305/3a=
51764d/attachment-0001.htm


More information about the HTML-FormFu mailing list