[Dbix-class] "Deletion" of records by setting status to 'deleted'

Ilya Chesnokov chesnokov.ilya at gmail.com
Mon Mar 9 18:04:48 GMT 2015


Hi,

I have a "service" table in my database and want to mark services as
deleted by setting service.status = 'deleted' instead of actually
deleting them (for business reasons).

I do it in a working project where DBIC is used as a database
interaction layer, and it is preferable to make these changes as
transparent  to the surrounding code as possible. Our codebase is
(mostly) covered with tests, so it's generally easy to understand
whether there is a regression or not.

First I tried to override search_rs() method in a custom resultset
with something like this:
https://gist.github.com/ichesnokov/1d4236f79c69fd14ebbe, but it didn't
work as expected on prefetches with condition in them.

Then I tried a method with resultset_attributes (see
https://metacpan.org/pod/DBIx::Class::ResultSource#resultset_attributes),
but it didn't work because it's impossible to get
"current_source_alias" from ResultSource.

Currently I'm using something based on the behavior of
resultset_attributes (see
https://gist.github.com/ichesnokov/e5fb7e70cb6d497ea5a0), and it
works, but requires fiddling with internal state of a resultset, which
seems a bit wrong.

Is there any better way for achieving the same?

Thanks.
-- 
Best regards,
Ilya Chesnokov



More information about the DBIx-Class mailing list