ThinkPHP 3.2.3中模型-定义-实例化

本文介绍ThinkPHP框架中模型类的定义方法及其实例化的两种方式:M和D函数的区别与用法。包括如何通过设置tableName、tablePrefix等属性来匹配不同数据库表,以及如何实例化空模型类执行原生SQL查询。
摘要由CSDN通过智能技术生成

 模型定义:

模型类并非必须定义,只有当存在独立的业务逻辑或者属性的时候才需要定义。

模型类通常需要继承系统的\Think\Model类或其子类:

namespace Home\Model;
use Think\Model;

class UserModel extends Model {

}

模型类的作用

多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表。

创建模型类

注意:注意trueTableName需要完整的表名定义。

namespace Home\Model;
    use Think\Model;

class UserModel extends Model {

//1:
//think_categories表,而我们定义的模型类名称是CategoryModel
//设置tableName属性来改变默认的规则(假设我们已经在配置文件里面定义了DB_PREFIX 为 think_
    protected $tableName = 'categories';

//2:
//如果数据表是 top_category;那么我们只需要设置数据表前缀即可:
    protected $tablePrefix = 'top_';

//3:
//数据表直接就是category,而没有前缀,则可以设置tablePrefix为空字符串。
//没有表前缀的情况必须设置,否则会获取当前配置文件中的 DB_PREFIX。
    protected $tablePrefix = '';

//4:
//需要操作的数据表是top_categories,这个时候我们就需要定义 trueTableName 属性
    protected $trueTableName = 'top_categories';

//5:
//用于操作当前数据库以外的数据表(top.top_categories)
    protected $trueTableName = 'top_categories';
    protected $dbName = 'top';

}

模型实例化:(D和M函数)

区别:

M(“表名”):实例化系统父类model  ,命名空间为:Think\Model

D(“自定义类名”):实例化我们自定义类名 , 命名空间为:Admin\Model\类名Model

注意:D方法功能更强大,因为后面我会在自定义类模型中添加很多方法和设置,这时候只能通过实例化D()去调用。

          如果D方法没有找到定义的模型类,则会自动调用M方法

详解:

D方法:

语法:$obj = D([‘模型名’]);

含义:实例化我们自己创建的模型(分组/Model目录中);如果传递了模型名,则实例化指定的模型,如果没有指定或者模型名不存在,则直接实例化父类模型(Model.class.php)

$User = D('User');//实例化模型
// 相当于 $User = new \Home\Model\UserModel();
// 执行具体的数据操作
$User->select();

当 \Home\Model\UserModel 类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\UserModel 类。
D方法还可以支持跨模块调用,需要使用:
//实例化Admin模块的User模型
D('Admin/User');

M方法:

语法:$obj = M([‘不带前缀的表名’]);

表达的含义:直接实例化父类模型(Think目录下的Model.class.php);如果指定了表名,则实例化父类模型的时候关联指定的表;如果没有指定表名(没有传递参数)则不关联表,一般用于执行原生的sql语句(M() -> query(原生的sql语句))。

$User = M('User');// 使用M方法实例化
// 和用法 $User = new \Think\Model('User'); 等效
// 执行其他的数据操作
$User->select();

 

实例化空模型类

如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了,例如:

//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值