模型定义,默认情况下,ThinkPHP的模型类是位于/Home/Model/目录之下,模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义:
文件命名遵守UserModel.class.php的方式,跟控制器的命名一样
<?php namespace Home\Model; use Think\Model; class UserModel extends Model { }
模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表,但你可以根据自己的需求来定制自己的数据表设置和操作。
首先我们需要在配置文件设置我们的数据库连接信息:
'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'database', 'DB_USER' => 'username', 'DB_PWD' => 'password', 'DB_PORT' => '3306',
这些配置信息还是在/Home/Conf/config.php文件里设置。
指定数据表前缀
指定标前缀,我们在第一课的配置项已经指定,以下的文字表示你可以灵活配置你的数据表。
protected $tablePrefix = 'top_';
如果数据库的表没有表前缀,使用空字符串代替
protected $tablePrefix = '';
指定数据表,此处的指定的数据表的不需要添加表前缀:
protected $tableName = 'user';
举个例子说,比如说你的数据库中有一个没有表前缀的,名为users的数据表,可以用以下的两种方法在模型中进行下面的定义:
第一,直接根据系统的规范来命名模型类来命名模型,比如说就命名为UsersModel那么只需要在这个类里面加上下面的设置就可以了:
protected $tablePrefix = '';
ThinkPHP系统就会自动定位到users表了。
第二种情况时,如果你的模型类没有按照系统规范来命名,比如说不小心命名为UserModel,这种情况下可以同时指定表前缀和表明,比如:
protected $tablePrefix = ''; protected $tableName = 'users';
或者你直接指定trueTableName:
protected $trueTableName = 'users';
既然模型通常是用来操作数据表,那么我们来看看模型的基本CURD:
注:为了方便演示,我们在UserController中定义一个testDemo()方法用于演示
public function testDemo() { }
以下的代码将会一段一段在这个方法里演示,你可以通过访问:8999/index.php/Home/User/testDemo来看到实际效果。
添加纪录
$user = M('User'); $data['username'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $user->create($data); $record = $user->add(); dump($record);
add()返回的是插入数据的id,对于不存在的表字段,add()方法会自动过滤。
读取纪录
在ThinkPHP中读取数据的方式很多,通常分为读取数据、读取数据集和读取字段值
$user = M('User'); $record = $user->where('username="ThinkPHP"')->find(); dump($record);
读取字段值
$user = M('User'); $record = $user->where('id=3')->getField('username'); dump($record);
默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值.如果getField()传入多个字段,返回值将是一个关联数组:
$user = M('User');
$record = $user->getField('username,email');
dump($record);
这个数组总是以传入的第一个第一个字段为键值的。如果修改为:
$user = M('User'); $record = $user->getField('email,username'); dump($record);
将上面的两次代码分别放到testDemo(),你就会看到不一样的结果集。
用save()方法更新数据
$user = M('User'); $data['username'] = 'ThinkPHPSave'; $data['email'] = 'ThinkPHPSave@outlook.com'; $record = $user->where('id=3')->save($data); dump($record);
这里的$record返回的事1,表示成功更改。
当然,你也可以这样:
$user = M('User'); $user->username = 'ThinkPHP'; $user->email = 'ThinkPHP@outlook.com'; $record = $user->where('id=3')->save(); dump($record);
日常开发的时候经常会遇到一些只更新某些字段的情况,可以通过下面的方式来实现:
$user = M("User"); $record = $user->where('id=4')->setField('username','ThinkPHPChangeName'); dump($record);
同时更新多个字段,可以将数据以数组的形式传给setField()方法:
$user = M('User'); $data = array('username'=>'ThinkPHPChangeArray','email'=>'ThinkPHP@array.com'); $record = $user-> where('id=6')->setField($data); dump($record);
ThinkPHP删除数据使用delete方法,例如:
$user = M('User'); $record = $user->where('id=3')->delete(); dump($record);
或者你可以直接使用:
$record = $user->delete('1,2,5'); dump($record);
这样就达到了删除主键1,2,5这三条纪录了。
ActiveRecords