[Dbix-class] Hiding storage details

Byron Young Byron.Young at riverbed.com
Mon Mar 16 19:48:53 GMT 2009


Andreas Mock wrote on 2009-03-16:
> Hi all,
> 
> as part of another thread I want to extract the following question
> with a more meaningful subject:
> 
> We do have objects (O) which consist of attribues (A) which are stored
> in a table O with columns A just as DBIC would model it. But we do also
> have sparse attributes (B) (attributes which are very often NULL) which
> are not stored as columns of the "base" table O but as rows of a - let's
> call it attribute table - where each "not null"- attribut B of O is a
> row in that table with a key consisting of a class identifier, an object
> identifier (O.id) and an attribute identifier.
> 
> After loading this object I want to see that object in a flat way. This
> "attribute collection" shall show up as "normal" (columns) attributes
> (with accessors named like the attribute identifier). While using the
> object from the application perspective I don't want to know that there
> are some attributes stored as columns in the base table and some as
> entries in a related table.
> 
> Is there a way in DBIC to do this?
> 
> Best regards
> Andreas Mock
> 

Hi Andreas,

You can add methods to your row class (O) that will fetch and return the data from the related table B.  E.g. you can add a $O->sparse_attr() method that would return the value of ($O->B || $O->B->value).

Any methods you add to your schema class for table O will be available as methods on the row object $O, so you're pretty free to create your own interfaes to your business objects and abstract the relationships aways from your client code.

Byron




More information about the DBIx-Class mailing list