| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > DBIx::Class, триггеры или что-то вроде того |
| Автор: Logo 13.5.2010, 15:46 |
| Есть DBIx::Class(Catalyst) и MySQL. Можно ли к полям привязать некоторую функцию-чекер, что бы перед добавлением записи в базу данных проверить это поле, и в случае неудачи вернуть ошибки, для последующей передачи в браузер пользователя? |
| Автор: odmink0 14.5.2010, 01:07 |
| Переопредели метод new() твоего ResultSet-а (строки таблицы) так, чтобы он вываливал исключение при попытке создать строку с невалидным полем - и отлавливай это исключение при вызове $rs->create( \%fields_hash ); в контроллере Catalyst. Не забудь в конце своего переопределенного new() вызвать $class->next::method($fields_hash_ref); |
| Автор: Logo 14.5.2010, 09:54 |
| Но класс DBIx::Class::ResultSet один для всех таблиц, а мне нужно сделать проверку для конкретной таблицы. |
| Автор: odmink0 14.5.2010, 11:18 |
| Resultset - это объект, который представляет твою таблицу или результат выполнения запроса. Файлы, представляющие классы этого объекта, находятся в каталоге lib/MyApp/Schema/MyDB/Result. Вот здесь можно получить некоторую информацию: http://www.slideshare.net/kostenko/dbixclass http://www.slideshare.net/jshirley/demystifying-dbixclass Ну и в мануале, конечно ;) |
| Автор: Logo 14.5.2010, 11:32 |
| Насколько я понимаю, то что лежит lib/MyApp/Schema/, это классы схемы. ref $c->model('MyAppDB::Table') выдает DBIx::Class::ResultSet. |
| Автор: odmink0 14.5.2010, 13:52 | ||||
Да, я слегка напутал в первом посте. В каталоге lib/MyApp/Schema/MyDB/Result находятся классы, описывающие строки таблицы. При вызове метода $resultset->create( \%fields ); (создание новой строки таблицы) вызывается метод new() класса, который описывает эту строку - одного из тех, которые находятся в каталоге Result. Вот именно там-то тебе и надо делать проверку - т.е. переопределять этот метод. Код примерно такой:
|