Hi guys,
I'm working with a legacy schema for a website. It has a posts table, and
posts are hierarchical; so, each post has a post_parent column, which is 0
for top-level posts and contains the ID of a post for posts that are
children.
I have this association modelled fine with a self-association:
one_to_many :children, :key => :post_parent, :class => self
This gives me post.children, an array containing all of the children.
That's great.
However, there's an extra step. This schema implements a sort of Single
Table Inheritance, whereby these children also have types.
If their post_type is the same as the parent, they're regular posts and
should be included in the "children" association as above.
But posts that have post_type "attachment" should be in an "attachments"
association; and posts that have post_type "revisions" should be in a
"revisions" association.
So I basically want to extend this association code:
one_to_many :children, :key => :post_parent, :class => self
one_to_many :revisions, :key => :post_parent, :class => self
one_to_many :attachments, :key => :post_parent, :class => self
to have conditions on the second two associations that are the equivalent
of, in SQL, `JOIN posts p2 ON p1.ID = p2.ID AND p2.post_type =
"attachments"', and a condition on the first that is the equivalent of
`JOIN posts p2 ON p1.ID = p2.ID AND p1.post_type = p2.post_type`.
If I were to phrase what I'm trying to achieve as some sort of procedural
pseudo-code:
foreach ( children as child )
if child.post_type == parent.post_type
add to "children" association
elsif child.post_type == "attachments"
add to "attachments" association
elsif child.post_type == "revisions"
add to "revisions" association
Can this type of association be modelled in Sequel?
Many thanks,
Rob Miller
P.S. for those who guessed, yes, the legacy schema I'm talking about is
WordPress — I'm in the early stages of writing an ORM wrapper for it so I
don't have to delve into PHP to work on our many WordPress sites:
https://github.com/robmiller/ruby-wpdb
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/groups/opt_out.