I have a main table ‘Blog’ (fields: blog_id, name, type_id)
I got a table ‘BlogType’ (fields: type_id, name) (has all possible Blog Types)
I have another table for the subscriptions ‘BlogSubscription’ (fields: subscription_id, blog_id, ref_id) ==> Users & Groups can subscribe to a Blog
‘Users’ (fields: user_id, username)
‘Group’ (fields: group_id, name)
Now my problem is, the ‘BlogSubscription.ref_id’ is related to ‘Users’ if the ‘Blog.type_id’ equals to ‘1’, and its related to ‘Groups’ if the ‘Blog.type_id’ equals to ‘2’.
How to do this correctly so I can access the user or the group model?
Welcome to the forum.
If you want to obtain in this way, you should write the condition in the relation:
'blog' => array(self::BELONGS_TO, 'Groups', 'ref_id', 'condition' => 'type_id = 1'),
'user' => array(self::BELONGS_TO, 'Groups', 'ref_id', 'condition' => 'type_id = 2'),
But it looks like a quite bad design. I’d better do 2 different fields, blog_id and user_id. This allows you to set the foreing key and use the referential integrity.
P.s: welcome to the forum!
And thanks for the warm welcome on the forum!
Indeed, its a bad design, I’m starting to convert my old sites to Yii, so maybe its the best time to setup my database in a better design .
I am a quite lazy guy, so I desin the database in order to delegate the most work possible to the dbms.
If you are planning a major refactoring of database, I suggest you that lot of feature of Yii works better if each table has a primary key with one field (like autoincrement).
You can add whereever this keys, they will help a lot.