[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