- 新站要多发原创内容
- Asp.net程序性能优化(一)
- .NET内置对象之Cookie对象
- 链接有那几种,网站优化时应该注意什么?
- 合格的电商运营应该具有哪些能力呢?
- C#操作ACCESS数据库(创建,压缩,备份,恢复)
- C#常用日期格式转换大全 .
- sql server 2005中 char()、nchar()、varchar()、nvarchar()有什么区别?
- 网站吸引眼球二重奏的要素
- 微信小程序直播插件live-player-plugin使用
邮箱:
手机:15383239821
thinkphp实例化模型、模型命名和获取字段
实例化模型
在ThinkPHP2.0及以上版本中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑时,模型类才是必须定义的,因此ThinkPHP在模型上有很多灵活性和方便性,而不必因为表太多而烦恼
ThinkPHP有几种实例化模型的方法
1、实例化基础模型类
即实例化系统自带的Model类,ThinkPHP会自动帮我们找到数据库中相应的表,并获取其字段(表结构信息)
$User=new Model('User');
$User=M('User');(快捷方法,通过M()函数)
大写字母与下划线关系(think_是在配置文件中设置的表前缀)
实例化基础模型类传递进去的参数 在数据库中对应的表名
User think_user
UserMessage think_user_message
ps,因为表前缀中已经有了一个下划线,所以user对应的也是think_user
2、实例化其它模型类
第一种实例化方法因为没有涉及自定义模型类,因此很难封装一些自定义的业务逻辑(因为ThinkPHP自带的基础模型类显然只提供了基本的CRUD操作等等一些操作,肯定是无法满足项目业务逻辑的,所以必须自定义模型类来封装自定义业务逻辑),如果只需要扩展一些通用的(所谓通用,就是多个针对不同表的模型类都需要用到的逻辑)自定义业务逻辑,那么可以采用这种方式
$User=new CommonModel('User');
$User=M('User','CommonModel');(快捷方式,通过M()函数)
ps,CommonModel类是一个自定义模型类,在应用目录->Lib目录->Model目录->CommonModel.class.php文件中
因为ThinkPHP是自动加载模型类的,所以在实例化模型类之前不需要手动模型类文件的导入,即不需要require '模型类文件';等
自定义模型类必须继承系统自带的模型类(比如说Model类),而且没有别名导入的话,自定义模型类文件必须放在应用目录->Lib目录->Model目录下
可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。
3、实例化自定义模型类
得先定义针对不同表的自定义模型类,比如说UserModel类,UserMessagesModel类等等,然后再进行实例化。这种方式是用的最多的
$User=new UserModel;
$User=D('User');(快捷方式,通过D()函数),D()函数有自动检测自定义模型类的功能,如果应用目录->Lib目录->Model目录下存在所传入参数对应的自定义模型类(即参数User对应于自定义模型类UserModel),那么就会实例化该自定义模型类,否则则实例话系统自带的模型类(Model类)。而且对于已经实例化过的模型不会重复实例化,默认的D()函数只能实例化当前应用的模型类,不能跨应用实例化模型类,如果想实例化其它应用的模型类,则可以$User=D('User','其它应用名');,如果启用了模块分组,则可以$Usr=D('其它分组名.User');
ps,这种实例化模型方式与上一种方式有何区别,其实上一种方式最大的特征就是通用。对于一张表,如果你只想对其进行简单的CRUD操作,则采用第一种方式即可;如果你不仅想对其进行简单的CRUD操作,还想用到一些该项目其它表通用的自定义逻辑操作,则采用第二种方式;如果不仅想对其进行CRUD操作,还想用到一些自定义的逻辑操作,而且这些逻辑操作只有该表用到(即不需要用到其它表通用的自定义逻辑操作),则采用第三种方式
4、实例化一个空模型类
如果仅仅是想使用原生SQL的话,不需要使用额外的模型类,可以选择实例化一个空模型类
$Model=new Model();
$Model=M();(快捷方式,通过M()函数)
比如说$Model->query('SELECT * FROM think_user where status=1');
不管是采用哪一种方式,以及不管是采用new、M()或者D()进行实例化模型类,都会ThinkPHP都会自动加载数据库连接信息去连接数据库,如果数据库连接失败也是会报错的
-
2010-10-01C#计算时间差中的TimeSpan应用
-
2020-04-18局域网的打印机每次都要打印一张测试页才能用怎么解决
-
2010-07-20FCKeditor 2.6.3在ASP.NET中的配置方法
-
2018-11-14微商怎么做,微商怎么找客源!
-
2022-11-28微信小程序开发之:import、require和include
-
2024-02-24Element-ui常用标签及其含义
