[Koha-devel] Koha and DBIC
Jonathan Druart
jonathan.druart at biblibre.com
Wed Sep 10 11:00:45 CEST 2014
Hi all,
IMO a ResultSet should not be instantiate in a pl script for some
reasons (I already listed yesterday, nothing new :))
- should be unit tested
- easier to maintain
- easier to reuse
But I don't think it's a big deal.
I think someone (don't remember who) explained it is not a good idea
to add too much changes to the ResultSet class. I tend to agree.
In your example:
$borrower->is_debarred
Where do you instantiate $borrower? And where is defined is_debarred?
I would write something like I have written for
Koha::Acquisition::Order (bug 12830)
package Koha::Borrower;
use Koha::Schema;
use base qw( Class::Accessor );
sub fetch {
my ( $class, $borrowernumber ) = @_;
my $borrower =
Koha::Database->new->schema->resultset('Borrower')->find($borrowernumber,
{result_class => 'DBIx::Class::ResultClass::HashRefInflator' } );
return $class->new( $borrower );
}
sub is_debarred {
my ( $self ) = @_;
my $debarred_date = $self->{debarred};
return $debarred_date > $today;
}
in the pl file:
my $borrower = Koha::Borrower->fetch( $borrowernumber );
The limitation in this implementation is that $borrower is not a DBIC
object and we would like to get rid of HashRefInflator.
Please comment this part of code and share yours!
Cheers,
Jonathan
2014-09-09 19:21 GMT+02:00 Kyle Hall <kyle.m.hall at gmail.com>:
> As discussed in #koha, I think we are not using DBIC as well as we could.
> Right now we are only using it to replace hand written SQL queries. I would
> propose the following:
>
> 1) Allow find and simple searches in pl.
> 2) If a search is used more than once, it should be a ResultSet method
> 3) If a subroutine operates on a single table row, it should be a Result
> method
> 4) If a subroutine operates on a single table, it should be a ResultSet
> method
> 5) Any operation that works on tables linked by key constraints should take
> advantage of those DBIC relationships and also
>
> In this way we can do things like:
> $borrower->is_debarred
> or
> $borrower->has_overdues
> or
> @borrowers = $borrower->guarantees()
>
> Any search can be a method in the ResultSet such as
> $borrower->issue()->overdue_issues();
> or
> my @records_with_holds = $schema->resultset('Biblio')->with_holds()
>
> I think in the long run this will make or code far more readable, testable,
> and efficient.
>
> What do you think?
>
> Kyle
>
> http://www.kylehall.info
> ByWater Solutions ( http://bywatersolutions.com )
> Meadville Public Library ( http://www.meadvillelibrary.org )
> Crawford County Federated Library System ( http://www.ccfls.org )
> Mill Run Technology Solutions ( http://millruntech.com )
>
> _______________________________________________
> Koha-devel mailing list
> Koha-devel at lists.koha-community.org
> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel
> website : http://www.koha-community.org/
> git : http://git.koha-community.org/
> bugs : http://bugs.koha-community.org/
More information about the Koha-devel
mailing list