请教下自动模型的思路

现在我有一些数据库表是由用户通过程序创建的,表的字段也都是自定义的。

我想通过一个自动的模型来加载这些自定义的表,并对其进行一些AR的基本操作。

我该如何去做,搜索下了E文资料,就看到两三篇帖子,看的也不太明白,有没有做过的朋友指点下。谢谢。

不太靠谱 不可能让用户来修改表结构的 只可能你设计了一个元表 然后所有的操作是对此表的操作 你这种需求类似于做phpmyadmin 可以让用户通过客户端来创建表结构 :lol:

参考下这个项目 开源的 源码可以下载下来 类似于phpmyadmin的功能

yii chive

这种需求也可能出现在电商程序中 比如用户建立商品类型

怎么不靠谱啊?

用户自定义模型字段在很多应用中是很常见的操作呀。

如果你的需求真这么独特 那么我告诉你 也不是不可实现 你在程序中调用yiic 命令动态创建AR 也不是不可能

也可以用类似 eval 这样的东西来做

$code = ‘MyNewModel extends CActiveRecord { public …}’

eval($code);

但这样存在效率问题 用yiic命令可以把创建的Ar放在某个文件夹下

php 中也存在某些工具可以动态生成类 你自己查查吧 好像还是很有名的扩展(被用来实现AOP编程 可以在运行期修改类 添加类)

Ar其实应该是设计期的产物 不应该是运行期的 如果你允许动态添加Ar 这种情形 其实就跟ThinkSns中允许动态修改表结构一样 。 随着时间的推移 系统可能变的不可预测(类和表的增加不受编程者控制了) 当然如果你有系统规划 这也是适应性编程的目标

 总之你自己权衡利弊吧 <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/laugh.gif' class='bbc_emoticon' alt=':lol:' />

yii-user扩展里面的profile好像就是动态的生成表结构; 我也同意yiqing95的观点, 让用户动态修改数据表结构不一定是好主意。 不过既然是用户的需求,一定会有好方案,只是俺还不知道,

那个是个数据库表设计中的经典模式 叫 EAV 实体—属性—值 原本横向表 用此模式后就可以变为纵向 可以不用修改表结构 但能够达到扩展字段的效果 缺点是查询效率比较低 优点是很灵活 电商的商品表常用此模式 比较出名的mangento就是这样 还有wordpress里面的评论表commentmeta 也用的这种技巧

在yiiext扩展中有这个yiiext 非官方yii扩展集 里面的eav_behavior 就是搞这个的 :lol:

谢谢指教,有空看一下。