Sql store ids
Описание
Функция-обёртка над wish table_data, позволяющая обрабатывать данные полей ввода типа checkboxes и tree лаконичными однострочными вызовами.
Если данные для полей checkboxes / tree подготавливаются процедурой add_vocabularies с опцией ids, то sql_store_ids с необходимыми параметрами вызывается из-под do_update_DEFAULT, что позволяет записывать данные о связях многие-ко-многим, не прибегая к явному программированию.
При этом информация, необходимая для обработки поля с именем $name (на данный момент это только имя связной таблицы), передаётся через параметр $_REQUEST {__checkboxes_$name}, который устанавливается в add_vocabularies. Если вы используете add_vocabularies с ids и do_update_DEFAULT, но по каким-либо причинам не хотите, чтобы sql_store_ids вызывалась автоматически, удалите значение $_REQUEST {__checkboxes_$name}.
Синопсис (Perl 5)
Допустим, в системе имеется (как всегда) таблица пользователей users и таблица рабочих групп workgroups. Отношение многие-ко-многим между ними устанавливается посредством таблицы users_workgroups, имеющей ссылки id_user и id_workgroup.
На карточке пользователя можно извлечь справочник групп одновременно со списком связанных id (опция ids):
sub get_item_of_users { my $data = sql ("users"); ... add_vocabularies ($data, workgroups => {ids => 'users_workgroups'}, ... ); }
далее отобразить на форме группу checkboxes:
sub draw_item_of_users { ... { name => 'id_workgroup', label => 'Рабочие группы', type => 'checkboxes', values => $data -> {workgroups}, }, ... }
Остаётся обработать значения параметров $_REQUEST {id_workgroup_...}:
sub do_update_users { ... sql_store_ids (users_workgroups => 'id_workgroup'); ... }
Если требуется разместить на карточке рабочей группы список её участников, то можно сделать всё симметрично (разумеется, это можно позволить себе, если число пользователей измеряется десятками, но не сотнями):
sub get_item_of_workgroups { my $data = sql ("users"); ... add_vocabularies ($data, users => {ids => 'users_workgroups'}, ... ); } sub draw_item_of_workgroups { ... { name => 'id_user', label => 'Участники', type => 'checkboxes', values => $data -> {users}, }, ... } sub do_update_workgroups { ... sql_store_ids (users_workgroups => 'id_user'); ... }