🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 推荐大家严格按照MVC分层进行项目的开发工作,这样不但有利于后期增加API手机客户端接口,同时也便于项目的后期优化升级。 ### 数据模型 模块开发时数据表有一个约定:以模块名开头。 如您正在开发问答模块,那么您的数据表应该类似下: ly_ask_category ly_ask_post ly_ask_comment ly_ask_mark 与之对应的模型应该命名如下: CategoryModel.class.php PostModel.class.php CommentModel.class.php MarkModel.class.php 问:此时ThinkPHP资深玩家会提出问题:当用D方法去实例化这样的模型时,TP会报错说找不到对应的数据表。 答:因为TP默认是完全按照模型的名称去查询数据库的,以Category为例,D('Category')是去查找ct_category这张表,但是我们并没有一个这样的数据表,但是我们有ct_ask_category,那么解决办法就是利用模型的$tableName手动指定数据表名称,如下所示: 其实这里出现这样的处理原因是模块的控制器和模型在文件系统级别上可以通过文件夹来防止冲突,但是在数据库层面确智能通过前缀来防止冲突。因此这里出现了这样的解决办法。 ```php // +---------------------------------------------------------------------- /** * 默认模型 * @author jry <598821125@qq.com> */ namespace Test\Model; use Think\Model; class DefaultModel extends Model { /** * 数据库真实表名 * 一般为了数据库的整洁,同时又不影响Model和Controller的名称 * 我们约定每个模块的数据表都加上相同的前缀,比如微信模块用weixin作为数据表前缀 * @author jry <598821125@qq.com> */ protected $tableName = 'test_default'; /** * 自动验证规则 * @author jry <598821125@qq.com> */ protected $_validate = array( array('title', 'require', '标题不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH), array('content', 'require', '内容不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH), ); /** * 自动完成规则 * @author jry <598821125@qq.com> */ protected $_auto = array( array('create_time', NOW_TIME, self::MODEL_INSERT), array('update_time', NOW_TIME, self::MODEL_BOTH), array('sort', '0', self::MODEL_INSERT), array('status', '1', self::MODEL_INSERT), ); } ```