Sorry, probably it wasn’t clear. By ID, I simply mean the primary key (normally called by GET). For example, if I send a request like model/view/id/78 I would like to get 78 inside the relations() method.
How to get this attribute of the model at that point in runtime (without relying on $_GET or similar)?
There are several things that I worry about in your design.
A big fat single bridge table for 6 MANY_MANY relations doesn’t seem to be very fast or easy to maintain.
Artist, for instance, would have a MANY_MANY relation named “artists” inherited from your base class. It doesn’t make sense.
I would go simple and flat, maybe with a lot of similar lines of code repeated, and with a lot of dedicated bridge tables for every MANY_MANY relations.
Well, I don’t have any intention to criticize your way of doing. It should be a matter of taste, and I just love KISS more than DRY. I would prefer 1,000 lines of simple and easy code more than 500 lines of complicated tricky code when I couldn’t think of an elegant solution.