[建议]:能否加上数据表前缀的定义

#1 寒夜逍遥

现在很多虚拟主机都只提供一个数据库,很多情况下都需要用到数据表前缀来区分同类型的数据表,现在大部分CMS也都有这个功能。
现在框架还不提供数据表前缀功能,当然,自己稍微扩展一下Model类或直接修改也是很容易,但是毕竟没有框架本身直接支持用起来爽。
如果可以的话,加上这个功能框架就更显完美了。

2016-11-11 11:54:52

#2 jake

首先得感谢你的支持和建议。

表前缀这个之前衡量过,虽然看起来有点方便,但是还是决定不加入,理由如下:

加了前缀配置,就多了个配置,然后如果我不想要呢?那么还得加入个配置说到底我要还是不要,这里又多了个配置。

如果是照旧版的做法,有两个表名,一个有前缀一个没前缀,那么每次执行数据库操作之前,都要去先判断一次,有点浪费。并且当有前缀后,某时刻我又不想要了呢?那么又得写个没有前缀的。

有了前缀后,纯写SQL时,还得想办法把完整表名弄出来。新版比较推崇直接写SQL,毕竟那是最接近PHP的做法,所以SQL直接操作会比较多,那么这表名又得纠结了。

进一步说,如果加入表名前缀,那么所谓的表名映射要不要加呢?有可能一个model对应的表可能会改名哦,做个表名的映射会不会更好点?还有多个数据库,多种数据库又怎么样?这里引申出来的问题非常多,但是实际上开发中很少遇到。

所以,像这样没有太多作用,而又会增加很多心智负担的功能,还是不要加入得好。

2016-11-11 14:04:06

#3 寒夜逍遥

嗯,理解了,果然做框架需要考虑的方方面面的确实要比我实际做一个特定项目的说很多啊。

谢谢!

我根据实际项目需要,发现加个前缀功能很简单,这里说一下,方便需要的人用:
1、在程序载入框架前先定义一个全局变量,我是在我自己的配置文件中写了句
define('DB_PERFIX','jos_');
2、在 Mode l类的 execute 函数第一行修改成 $this->sql[] = str_replace  ( '__', DB_PERFIX, $sql );
3、在任何需要使用表名的地方都用 __ 代替前缀;
4、不需要前缀的情况,定义的常量为空字串就行。
这个暂时满足我自己的需要了,算是抛砖引玉吧。

2016-11-11 15:45:16

#4 晴天再现

jake 发表于 2016-11-11 14:04
首先得感谢你的支持和建议。

表前缀这个之前衡量过,虽然看起来有点方便,但是还是决定不加入,理由如下: ...
这段话确实给我一些启发,确实好多地方不用想太多。。

2016-11-12 11:24:30