[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