On 03/18/2016 03:20 PM, Hartmaier Alexander wrote:
Hi list,
as I'm turning around in circles and not finding a solution that
satisfies me I'm asking here for help:

My schema includes devices, interfaces and lines which can be affected
by one or more maintenances.
A maintenance has a datetime_start and datetime_end column.

device->has_many('rel_maintenance_device')->belongs_to('rel_maintenance')

What I want to achieve is to get a list of maintenances currently active
(datetime_start <= DateTime->now && datetime_end >= DateTime->now ).

My current solution is a virtual DBIC view which joins rel_maintenance
and filters on datetime_start and datetime_end. This has the
disadvantage that I have to pass DateTime->now formatted for the
currently connected database and can't just prefetch the rel.

I am still not entirely sure I understand what you are trying to do, but I think it is this (executable from a DBIC checkout, uses its test schema):

~/devel/dbic$
perl -It/lib -Ilib -MANFANG -MDevel::Dwarn -e '

  # add the special rel
  require DBICTest::Schema::CD;
DBICTest::Schema::CD->has_many( links_to_non_mst_producers => "DBICTest::Schema::CD_to_Producer", sub {
    my $args = shift;
    {
"$args->{foreign_alias}.cd" => { -ident => "$args->{self_alias}.cdid" },
      "$args->{foreign_alias}.producer" => {
        -in => $args->{self_resultsource}
                     ->schema
                      ->resultset("Producer")
->search({ "me.name" => { -not_like => "%Trout%" } })
                        ->get_column("producerid")
                         ->as_query
      },
    }
  });


  require DBICTest;


  Dwarn [ DBICTest->init_schema->resultset("CD")->search(
    { cdid => 1 },
    {
      result_class => "DBIx::Class::ResultClass::HashRefInflator",
      prefetch => {
        cd_to_producer => "producer",
        links_to_non_mst_producers => "producer",
      }
    }
  )->all ];
'

This does two parallel prefetches for illustration purposes: one branch holding all the producers and the other holding just the select producer list.

Let me know if this is not what you wanted.

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk

Reply via email to