1、模型定义。在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。
模型类通常需要继承系统的ThinkModel类或其子类,下面是一个HomeModelUserModel类的定义:
namespace HomeModel; use ThinkModel; class CategoryModel extends Model { protected $trueTableName = 'top_categories'; protected $dbName = 'top'; }
2、模型实例化。根据不同的模型定义,我们有几种实例化模型的方法,根据需要采用不同的方式:
(1)直接实例化。可以和实例化其他类库一样实例化模型类,模型类通常都是继承系统的ThinkModel类,例如:
$User = new HomeModelUserModel(); // 带参数实例化 $New = new HomeModelNewModel('blog','think_',$connection);
(2)D方法实例化。D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化系统的ThinkModel基类,同时对于已实例化过的模型,不会重复去实例化。
$User = D('User');
(3)M方法实例化。D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
$User = M('User');
(4)实例化空模型类。
//实例化空模型 $Model = new Model(); //或者使用M快捷方法是等效的 $Model = M(); //进行原生的SQL查询 $Model->query('SELECT * FROM think_user WHERE status = 1');
3、数据库连接信息。系统默认会读取配置文件中的相关参数,包括:
'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // 服务器地址 'DB_NAME' => '', // 数据库名 'DB_USER' => '', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '', // 端口 'DB_PREFIX' => '', // 数据库表前缀 'DB_DSN' => '', // 数据库连接DSN 用于PDO方式 'DB_CHARSET' => 'utf8', // 数据库的编码 默认为utf8
上面实例化方法中直接实例化和M方法实例化,都可以传入数据库连接信息。数据库连接信息参数支持三种格式:
(1)字符串定义
new HomeModelNewModel('blog','think_','mysql://root:1234@localhost/demo');
(2)数组定义
$connection = array( 'db_type' => 'mysql', 'db_host' => '127.0.0.1', 'db_user' => 'root', 'db_pwd' => '12345', 'db_port' => 3306, 'db_name' => 'demo', ); new HomeModelNewModel('new','think_',$connection);
(3)配置定义
//数据库配置1 'DB_CONFIG1' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '1234', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name' => 'thinkphp' ), //数据库配置2 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp',
然后,我们就可以这样实例化模型类传入连接信息:
new HomeModelNewModel('new','think_','DB_CONFIG1'); new HomeModelBlogModel('blog','think_','DB_CONFIG2');