ThinkPHP模型详解
ThinkPHP  /  管理员 发布于 8年前   182
模型定义,默认情况下,ThinkPHP的模型类是位于/Home/Model/目录之下,模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义: 文件命名遵守UserModel.class.php的方式,跟控制器的命名一样 模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表,但你可以根据自己的需求来定制自己的数据表设置和操作。 首先我们需要在配置文件设置我们的数据库连接信息: 这些配置信息还是在/Home/Conf/config.php文件里设置。 指定数据表前缀 指定标前缀,我们在第一课的配置项已经指定,以下的文字表示你可以灵活配置你的数据表。 如果数据库的表没有表前缀,使用空字符串代替 指定数据表,此处的指定的数据表的不需要添加表前缀: 举个例子说,比如说你的数据库中有一个没有表前缀的,名为users的数据表,可以用以下的两种方法在模型中进行下面的定义: 第一,直接根据系统的规范来命名模型类来命名模型,比如说就命名为UsersModel那么只需要在这个类里面加上下面的设置就可以了: ThinkPHP系统就会自动定位到users表了。 第二种情况时,如果你的模型类没有按照系统规范来命名,比如说不小心命名为UserModel,这种情况下可以同时指定表前缀和表明,比如: 或者你直接指定trueTableName: protected $trueTableName = 'users'; 既然模型通常是用来操作数据表,那么我们来看看模型的基本CURD: 注:为了方便演示,我们在UserController中定义一个testDemo()方法用于演示 以下的代码将会一段一段在这个方法里演示,你可以通过访问http://localhost:8999/index.php/Home/User/testDemo来看到实际效果。 添加纪录 add()返回的是插入数据的id,对于不存在的表字段,add()方法会自动过滤。 读取纪录 在ThinkPHP中读取数据的方式很多,通常分为读取数据、读取数据集和读取字段值 读取字段值 默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值.如果getField()传入多个字段,返回值将是一个关联数组: 这个数组总是以传入的第一个第一个字段为键值的。如果修改为: 将上面的两次代码分别放到testDemo(),你就会看到不一样的结果集。 用save()方法更新数据 这里的$record返回的事1,表示成功更改。 当然,你也可以这样: 日常开发的时候经常会遇到一些只更新某些字段的情况,可以通过下面的方式来实现: 同时更新多个字段,可以将数据以数组的形式传给setField()方法: ThinkPHP删除数据使用delete方法,例如: 或者你可以直接使用: 这样就达到了删除主键1,2,5这三条纪录了。 ActiveRecords ThinkPHP实现了ActiveRecords模式的ORM模型,采用了非标准的ORM模型:表映射到类,记录映射到对象。以下实例将使用ActiveRecords重现对数据表的CURD,看看ActiveRecords给我们带来了什么好处。 读取纪录 AR最大的特点可能就是它的查询模式了,模式简单易用,因为更多情况下面查询条件都是以主键或者某个关键的字段。这种类型的查询,ThinkPHP有着很好的支持。 比如说获取主键为2的用户信息: 直接不用where()查询了,简单友好吧。再比如: 如果是查询多条纪录,使用以下方式: 更新记录 删除记录 删除单条纪录 删除多条纪录 自动完成 自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,当使用create()方法创建数据对象的时候会触发自动完成数机制。 因此,在ThinkPHP鼓励使用create()方法来创建数据对象,因为这是一种更加安全的方式,直接通过add()或者save()方法实现数据写入无法出发自动完成机制。 自动完成通常用来完成默认字段写入(比如添加时间戳),安全字段过滤(比如加密密码)以及业务逻辑的自动处理等。可以通过模型类里面通过$_auto属性定义处理规则。下面演示如何自动完成添加时间戳: 在UserModel中,声明自动完成的定义数组$_auto : 还有一种是理由auto()方法动态设置自动完成的机制,可以到官方文档去看看 设置完成之后,我们在testDemo()方法中创建一条用户数据: 测试,如果返回纪录的id值,说明用户纪录创建成功。要验证数据是否自动完成,你可以直接使用: 自动验证 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create()创建数据对象的时候自动进行数据验证。 数据验证可以进行数据类型、业务规则、安全判断等方面的验证操作。 通常用于表单验证 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则。 动态方式:使用模型类的validate()方法动态创建自动验证规则。 无论是什么方式,验证规则的定义是统一的规则,定义格式为: array( 在UserController中创建register()方法,对,几乎每一个Web应用都需要实现用户注册这一步。 对,就是这么简单,这个方法只是将相应的视图文件渲染出来。所以接下来我们创建对应的视图文件,也就是:./Application/Home/View/User/register.html 'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'database', 'DB_USER' => 'username', 'DB_PWD' => 'password', 'DB_PORT' => '3306',
protected $tablePrefix = 'top_';
protected $tablePrefix = '';
protected $tableName = 'user';
protected $tablePrefix = '';
protected $tablePrefix = '';protected $tableName = 'users';
public function testDemo() { }
$user = M('User');$data['username'] = 'ThinkPHP';$data['email'] = '[email protected]';$user->create($data);$record = $user->add();dump($record);
$user = M('User');$record = $user->where('username="ThinkPHP"')->find();dump($record);
$user = M('User');$record = $user->where('id=3')->getField('username');dump($record);
$user = M('User');$record = $user->getField('username,email');dump($record);
$user = M('User');$record = $user->getField('email,username');dump($record);
$user = M('User');$data['username'] = 'ThinkPHPSave';$data['email'] = '[email protected]';$record = $user->where('id=3')->save($data);dump($record);
$user = M('User');$user->username = 'ThinkPHP';$user->email = '[email protected]';$record = $user->where('id=3')->save();dump($record);
$user = M("User"); $record = $user->where('id=4')->setField('username','ThinkPHPChangeName');dump($record);
$user = M('User');$data = array('username'=>'ThinkPHPChangeArray','email'=>'[email protected]');$record = $user-> where('id=6')->setField($data);dump($record);
$user = M('User');$record = $user->where('id=3')->delete();dump($record);
$record = $user->delete('1,2,5');dump($record);
$user = M("User");$user->username = 'ThinkPHPWithActive';$user->email = '[email protected]';$record = $user->add();dump($record);
$user = M("User");$record = $user->find(2);dump($record);
$user = M("User");$record = $user->getByUsername("jelly");dump($record);
$user = M("User");$record = $user->select('1,3,8');dump($record);
$user = M("User");$user->find(21);$user->username = 'TOPThinkChangeWithAR';$record = $user->save();dump($record);
$user = M("User");$record = $user->delete(8);dump($record);
$user = M("User");$record = $user->delete('15,16');dump($record);// todo: 这里的自动验证和关联模型 调试不出来。
protected $_auto = array ( array('created_at','date("Y-m-d H:i:s", time())',3,'function'), array('updated_at','date("Y-m-d H:i:s", time())',3,'function'), );
$user = D('User');$data['username'] = "ThinkPHP";$data['email'] = "[email protected]";$user->create($data);$record = $user->add();dump($record);
$user = D('User');$record = $user->find(id);dump($record);
array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),
array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
......
);
下面以$_validate静态方式举例如何使用自动验证:public function register() { $this->display(); }
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号