对于ActiveRecord实现中读取db schema的担心

Yii的ActiveRecord实现中是自动地对数据库表的结构进行分析的,也就是每一次创建/使用该模型(Model)时,均会对数据库服务器发起以下2条查询:

SHOW COLUMNS FROM table_name

SHOW CREATE TABLE table_name

对于数据库表比较多的项目是否造成了较多的性能影响呢,而事实上表结构的更动并非很频繁,这一块里有没有一种比较妥善的cache方案呢。

还有一个问题就是在 ActiveRecord 的多表对应关系中好像强制要求了对方必须是主键(PK)?或者换句话说就是在 LEFT JOIN ON 的首要条件两端的字段名称不能自定义。(好像经常有这样的情况用到,甚至这可能并非原标准字段名,而是经过CONCAT()再组合。)

虽然这些情况完全可以通过 createCommand(‘SQL’)来作到,但感觉建立关系时的 addtional options 里应该可以实现这一点?

你可以设置db connection的schemaCachingDuration来缓存schema。

关于relation的key指定问题,目前的做法的确不够灵活,不过应该可以通过指定’on’选项来设定join的条件。

非常感谢回复. 正在学习Yii中, 架构做得相当大气, 非常喜欢!

通过 on 指定的 join 条件是附加的, 首要条件已经被限死在 local forigen key = Table2.primary_key :( , 当然通过自行调整数据库的设计也能完成. 只是稍显遗憾.

你研究得很透彻。:D 的确是这样。或许可以允许指定空的key,这样,join就完全由’on’确定了。