zoukankan      html  css  js  c++  java
  • ThinkPHP开发笔记-模型

    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');
  • 相关阅读:
    “菜鸟”程序员和“大神”程序员差距在哪里?别告诉我你连菜鸟都不算!
    Android开发:为什么你的学习效率如此低,为什么你很迷茫?
    Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输
    程序员如何回答面试官“请介绍一下自己”这类问题
    Android程序员事件分发机制学习笔记
    面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?
    List、Set、Map的区别
    在Eclipse中使用JUnit4进行单元测试(图文教程一)
    1
    2016、11、17
  • 原文地址:https://www.cnblogs.com/NaughtyBaby/p/4539716.html
Copyright © 2011-2022 走看看