创建数据库
首先,新建一个名为thinkphp
的数据库,里面新建一张表,名为think_user
。字段有:id、user、email、date。
ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操作。无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理。
目前支持:MySQL(包含MySQLI)、sqlserver、pgsel、sqlite、oracle、ibase、mongo、pdo等。
连接数据库
在App下的Common下的Conf中找到config.php
配置文件
//MySQL全局配置定义
'DB_TYPE'=>'mysql',
'DB_HOST'=>'localhost',
'DB_USER'=>'root',
'DB_PWD'=>'root',
'DB_NAME'=>'thinkphp',
'DB_PORT'=>3306,
'DB_PREFIX'=>'think_',
PDO方式:
'DB_TYPE'=>'mysql',
'DB_HOST'=>'localhost',
'DB_NAME'=>'thinkphp',
'DB_USER'=>'root',
'DB_PWD'=>'root',
'DB_PREFIX'=>'think_',
'DB_DSN'=>'',
实例化模型
连接上数据库后,我们需要从数据库里操作数据,就需要实例化模型类。TP中,提供了Model基类处理,也可以使用M()
方法。
比如基于UserController.class.php
控制器:
<?php
namespace Home\Controller;
use Think\Controller;
use Think\Model;
class UserController extends Controller{
public function index($user,$pass){
echo 'user:'.$user,'<br/>pass:'.$pass;
}
public function model(){
//创建Model基类,传递User表,也就是think_user
$user = new Model('User');
//var_dump($user); 打印句柄
var_dump($user->select()); //通过句柄获取数据
}
}
Model基类可以传递三个参数:
Model([‘模型名’],[‘数据表前缀’],[‘数据库连接信息’]);
实例化Model类,改变表前缀
$user = new Model('User','tp_');//是错的。
实例化Model类,定义数据库连接信息
$user = new Model('User','think_','mysql://root:root@localhost/thinkphp');
ThinkPHP调试工具,可以放在配置栏开启:
'SHOW_PAGE_TRACE'=>true,
M()方法
使用Model基类还需要导入命名空间,而使用M()方法,则不需要。
实例化Model类
<?php
namespace Home\Controller;
use Think\Controller;
// use Home\Model\UserModel;
//use Think\Model;
class UserController extends Controller{
public function index($user,$pass){
echo 'user:'.$user,'<br/>pass:'.$pass;
}
public function model(){
//创建Model基类,传递User表,也就是think_user
//$user = new Model('User');
$user = M('User');
//$user = new userModel();
//var_dump($user); 打印句柄
var_dump($user->select()); //通过句柄获取数据
}
}
D()方法
如果仅仅是使用增删改查,那基于Model的M()方法就够用了。
如果有必要使用具体的模型类时,建议使用D()方法来实例化模型类。
<?php
namespace Home\Controller;
use Think\Controller;
use Home\Model\UserModel;
//use Think\Model;
class UserController extends Controller{
public function index($user,$pass){
echo 'user:'.$user,'<br/>pass:'.$pass;
}
public function model(){
//创建Model基类,传递User表,也就是think_user
//$user = new Model('User');
//$user = M('User');
//$user = new userModel();
//var_dump($user); 打印句柄
//var_dump($user->select()); //通过句柄获取数据
//调用模型类,也就是Model下的UserModel.class.php
$user = D('User');
var_dump($user->select());
}
}
字段定义
每个模型类操作每个对应数据表,大多数情况下系统会自动获取当前数据表的字段信息。当模型类第一次实例化时,系统会自动缓存字段,并且永久缓存,除非删除运行时缓存或者设置不缓存。
这样的好处是可以快速响应。TP中默认开启字段缓存。
字段缓存文件保存在Runtime/Data/_fields
目录里。开发阶段,建议关闭缓存。方法为:
//关闭缓存字段
'DB_FIELDS_CACHE'=>fasle, //开启调试模式会自动关闭
Ps:如果开启了缓存状态,新增了字段,那可能新字段无法刷新出来,必须删除/Data/_fields
文件夹,重新获取字段。
//查看字段结构
var_dump($user->getDbfields());