比如有个日志表,日志来源可能有很多种,所以这个表有两个字段: 关联id(related_id)和关联类型(related_type),可能当related_type=1时对应的是A表的主键id;当related_type=2时对应的是B表的主键id。
定义模型关系时只能分开定义A的关系和B的关系,没法通过判断attributes返回不同的关系,所以只能在循环的时候判断是否需要加载A关系或者B关系。即使这么做了,实际执行的sql还是会多扫描很多记录。
假如一个页面展示50条日志,需要同时加载A和B的关系,sql会变成where A.id in(50条日志的related_id),where B.id in(50条日志的related_id),但实际上里面可能只有25条是A的,25条是B的,这样就会多扫描50行,假设这个日志需要导出的话。。
这种单表一个字段会对应多个不同表的有什么好的处理方法嘛。。
额,你做查询的时候不加关联类型的判断条件吗?另外,你的这个日志表可以这样设计:
id -> 主键 id,
log_id -> 对象日志 id,
log_type -> 对象的类型
···
至于相关类型的详细情况,可以根据 log_id 去查询,你要日志列表,那个以上这个表就好。
拙见,请指正···