[html-formfu] How to restrict retrieved rows in has_many relationships?

michele.gherlone at liceoberchet.it michele.gherlone at liceoberchet.it
Wed Aug 5 22:56:46 GMT 2009


> 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? In this
latter case I'm afraid I don't know yaml well enough to propose something
meaningful at all. 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?).
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;
Hopefully I'm talking about things which make sense...
Greets,
Michele

>
>>> 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
>





More information about the HTML-FormFu mailing list