版本调整功能
5.0.5model或者Loader::model方法支持传入完整的模型类名

模型定义

定义一个User模型类:

  1. namespace app\index\model;
  2. use think\Model;
  3. class User extends Model
  4. {
  5. }

默认主键为自动识别,如果需要指定,可以设置属性:

  1. namespace app\index\model;
  2. use think\Model;
  3. class User extends Model
  4. {
  5. protected $pk = 'uid';
  6. }

模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:

模型名约定对应数据表(假设数据库的前缀定义是 think_)
Userthink_user
UserTypethink_user_type

如果你的规则和上面的系统约定不符合,那么需要设置Model类的数据表名称属性,以确保能够找到对应的数据表。

设置数据表

如果你想指定数据表甚至数据库连接的话,可以使用:

  1. namespace app\index\model;
  2. class User extends \think\Model
  3. {
  4. // 设置当前模型对应的完整数据表名称
  5. protected $table = 'think_user';
  6. // 设置当前模型的数据库连接
  7. protected $connection = [
  8. // 数据库类型
  9. 'type' => 'mysql',
  10. // 服务器地址
  11. 'hostname' => '127.0.0.1',
  12. // 数据库名
  13. 'database' => 'thinkphp',
  14. // 数据库用户名
  15. 'username' => 'root',
  16. // 数据库密码
  17. 'password' => '',
  18. // 数据库编码默认采用utf8
  19. 'charset' => 'utf8',
  20. // 数据库表前缀
  21. 'prefix' => 'think_',
  22. // 数据库调试模式
  23. 'debug' => false,
  24. ];
  25. }

和连接数据库的参数一样,connection属性的值也可以设置为数据库的配置参数,而且也是官方推荐的方式,这样可以避免把数据库连接固化在代码里面。

5.0不支持单独设置当前模型的数据表前缀。

模型调用

模型类可以使用静态调用或者实例化调用两种方式,例如:

  1. // 静态调用
  2. $user = User::get(1);
  3. $user->name = 'thinkphp';
  4. $user->save();
  5. // 实例化模型
  6. $user = new User;
  7. $user->name= 'thinkphp';
  8. $user->save();
  9. // 使用 Loader 类实例化(单例)
  10. $user = Loader::model('User');
  11. // 或者使用助手函数`model`
  12. $user = model('User');
  13. $user->name= 'thinkphp';
  14. $user->save();
实例化模型类主要用于调用模型的自定义方法,更多用法参考后面的章节内容。