特殊的 MANY_MANY

正常的多对多表,通常那个中间表只有两个字段,但是特殊情况下,该怎么去关联这种 MANY_MANY 呢?比如:

有company, department, contact三个表,都和email表相关联,都是多对多的关系,中间表叫做email_record

company表:

company_id

email_id

department表:

department_id

email_id

contact表:

contact_id

email_id

email表:

email_id

email

email_record表:

email_id

record_id

type (ENUM, 值为 ‘company’, ‘department’, ‘contact’) 用来区分每条记录究竟是要和哪个表相关联

请问如何定义email表中的关联?我用下面的方法,提示错误:

‘rCompany’ => array(self::MANY_MANY, ‘Company’, ‘email_record(record_id, email_id)’, ‘condition’ => ‘rCompany.type=\‘company\’’),

‘rDepartment’ => array(self::MANY_MANY, ‘Department’, ‘email_record(record_id, email_id)’, ‘condition’ => ‘rDepartment.type=\‘department’’),

‘rContact’ => array(self::MANY_MANY, ‘Contact’, ‘email_record(record_id, email_id)’, ‘condition’ => ‘rContact.type=\‘contact’’),

如果去掉 condition 里的 ‘rCompany.’, ‘rDepartment.’, ‘rContact.’ 也许错误会消失,但是如果将来关联到的其它表里,正好也有个字段名是type的话,就会有问题

在AR生成的sql语句中,是否rCompany关联中的email_record表别名一定会是 rCompany_rCompany ?

在另一个网站得到了确认,多对多关联,查询时,中间表的名子叫 (关联名_关联名),看来,rCompany关联中的email_record表别名就是 rCompany_rCompany,所以,rCompany关联为:

‘rCompany’ => array(self::MANY_MANY, ‘Company’, ‘email_record(record_id, email_id)’, ‘condition’ => ‘rCompany_rCompany.type=\‘company\’’),

我也遇到了这个问题,请问这种情况下email表和email_record表的关联又该怎么写呢?