[html-formfu] How to restrict retrieved rows in has_many
relationships?
Mario Minati
mario.minati at googlemail.com
Thu Aug 6 06:42:42 GMT 2009
michele.gherlone at liceoberchet.it schrieb:
>> michele.gherlone at liceoberchet.it schrieb:
>>
>>>> Hi Michele,
>>>>
>>>> currently I don't think this is possible in the dynamic way you want
>>>> it.
>>>>
>>>> What I don't understand is that materia is a underneath voti. If
>>>> materia
>>>> shall control the elements of voti, it should be at least on the same
>>>> hierarchical level.
>>>>
>>>>
>>> Hi, Mario. I didn't explain my relationships in detail, maybe.
>>> Since table materia has_many voti, and table studente has_many voti, in
>>> the 'voti' table we have studente_id and materia_id. In the config file
>>> I
>>> showed you, I am exploiting in the last Block underneath voti the
>>> belongs_to relationship (voto belongs_to materia, materia_id). The
>>> column
>>> I'd like to restrict my results with would also be materia_id.
>>>
>>> I think I could also try to use a multi like a select or a checkboxgroup
>>> with options_from_ model, but again I should then set:
>>> model_config:
>>> resultset: Voto
>>> condition:
>>> materia_id: 2
>>> studente_id: 2315
>>>
>>>
>> This way is not dynamic and even the condition options is only available
>> for options_from_model method.
>>
>>
>>> Could I set these 2 params using dynamically defined values?
>>>
>>>
>> No, thats the problem. Currently Model::DBIC picks just 'all' elements
>> from the resultset (line 308). To implement some kind of selection at
>> this point we need to implement the condition attribute. Which way would
>> you say should a declaration for dynamic attributes look like?
>>
>>
> I think something like:
>
> $form->model->default_values($dbic_row, condition(s) => {nested_name =>
> 'voti', materia_id => $materia_id, ...});
>
> would be pretty useful. Of course in the calling Catalyst controller
> $materia_id is the result of some user's selection or whatever.
> Is this what you meant, or did you mean perhaps a condition for dynamic
> attributes to be implemented directly in the .yml config file?
Yes, we need to implement both ways, as form configuration from config
files was the original intention of FormFu.
> In this
> latter case I'm afraid I don't know yaml well enough to propose something
> meaningful at all.
Nevermind. These design decisions were always made in regard with the
author of HTML::FormFu.
But currently he seems to be on holidays. So I'd say we wait for his two
cent. Maybe he has thought this over already.
> BTW, how can you access the value of one field from
> within the .yml config file? Is that possible? If something like
> materia_id.value *IS* possible, then the condition attribute can be
> declared inside the .yml file (we add a hidden field materia_id after the
> call to default values?).
>
No sorry, also not possible. Only for constraints we have conditions
that look into other values.
> What line 308 in DBIC.pm does is just calling the rel name on a dbic_row
> with ->all, right?
> That should then become: @rows=$dbic->search_related($rel,
> materia_id=>$materia_id, ...)->all;
>
Exactly. We need to build in some kind of search at that place, which
takes the value from some other place, which might be quite tricky.
Greets,
Mario Minati
>>>> To achieve your goal, we would need to extend FormFu::Model::DBI to
>>>> handle dynamic parameters.
>>>>
>>>>
>>>> Greets,
>>>>
>>>> Mario Minati
>>>>
>>>> michele.gherlone at liceoberchet.it schrieb:
>>>>
>>>>
>>>>> Hi all.
>>>>> I've setup the following relationships in my application:
>>>>> - table classe has_many studenti
>>>>> - table studente has_many voti
>>>>> - table voto belongs_to studente, materia
>>>>> Now I have created the following table/form in yaml:
>>>>>
>>>>> ---
>>>>> auto_fieldset: 1
>>>>> elements:
>>>>> - type: Hidden
>>>>> name: count
>>>>> - type: Block
>>>>> tag: table
>>>>> attributes:
>>>>> width: 100%
>>>>> elements:
>>>>> - type: Repeatable
>>>>> tag: tr
>>>>> nested_name: studenti
>>>>> counter_name: count
>>>>> elements:
>>>>> - type: Block
>>>>> tag: td
>>>>> elements:
>>>>> - type: Hidden
>>>>> name: id
>>>>> - type: Label
>>>>> name: cognome
>>>>> - type: Label
>>>>> name: nome
>>>>> - type: Hidden
>>>>> name: count
>>>>> - type: Repeatable
>>>>> nested_name: voti
>>>>> counter_name: count
>>>>> tag: td
>>>>> elements:
>>>>> - type: Hidden
>>>>> name: id
>>>>> - name: voto
>>>>> - name: data_voto
>>>>> - type: Block
>>>>> nested_name: materia
>>>>> elements:
>>>>> - name: materia
>>>>>
>>>>> - type: Submit
>>>>> name: submit
>>>>> attributes:
>>>>> value: Invia
>>>>>
>>>>> This works very well. But what I want now to do is to restrict the
>>>>> rows
>>>>> which are retrieved by the nested Repeatable 'voti' based on the value
>>>>> of
>>>>> 'materia', i.e. I *DON'T* want all the notes for each student, but I
>>>>> want
>>>>> only a few of them based upon some search criteria. How can I pass a
>>>>> search condition or something similar to the repeatable block? Is this
>>>>> possible at all?
>>>>> Thanks in advance,
>>>>> Michele Gherlone
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> HTML-FormFu mailing list
>>>>> HTML-FormFu at lists.scsys.co.uk
>>>>> 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
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> HTML-FormFu mailing list
>>> HTML-FormFu at lists.scsys.co.uk
>>> 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
>>
>>
>
>
>
> _______________________________________________
> HTML-FormFu mailing list
> HTML-FormFu at lists.scsys.co.uk
> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/html-formfu
>
More information about the HTML-FormFu
mailing list