zoukankan      html  css  js  c++  java
  • thinkphp 学习1-模型

    1.用M()方法创建模型类

    $model = M("configsettings”);

    2.使用find()方法或select()方法返回结果集

    find()只返回一行记录,select()方法可以返回多行,可以结合where()方法按条件查询。

    $model->find();   //返回configsettings表的第一行记录
    
    //也可以用
    $model->where("")->find();
    
    $model->where('status=1 AND name="thinkphp"')->find();
    
    $model->where("name='thinkphp'")->select();  //返回name=thinkphp的所有记录

    3.自定义模型类

    如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库:

    <?php 
    namespace HomeModel;
    
    class UserInfoModel extends ThinkModel{
        //定义数据库连接
        protected $connection = array(        
            'db_type'  => 'mysql',       
            'db_user'  => 'root',       
            'db_pwd'   => 'goodtime',
            'db_host'  => 'localhost', 
            'db_port'  => '3306',
            'db_name'  => 'test',
            'db_prefix'=> '',
            'db_charset' => 'utf8'
        );
        
        protected $tableName = "userinfo"; //定义数据表名
        
    }
    ?>

    模型类并非必须定义,只有当存在独立的业务逻辑或者属性的时候才需要定义。模型类通常需要继承系统的ThinkModel类或其子类。

    模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model),例如:

    模型名 约定对应数据表(假设数据库的前缀定义是 think_)
    UserModel think_user
    UserTypeModel think_user_type

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

    4.模型实例化

    直接实例化

    可以和实例化其他类库一样实例化模型类,例如:

    $User = new HomeModelUserModel();
    $Info = new AdminModelInfoModel();
    // 带参数实例化
    $New  = new HomeModelNewModel('blog','think_',$connection);

    D方法实例化

    上面实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作。

    要实例化自定义模型类,可以使用下面的方式:

    <?php
    //实例化模型
    $User = D('User');
    // 相当于 $User = new HomeModelUserModel();
    // 执行具体的数据操作
    $User->select();
    ?>

    D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的。

     

    M方法实例化模型

    D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。

    // 使用M方法实例化
    $User = M('User');// 和用法 $User = new ThinkModel('User'); 等效
    // 执行其他的数据操作
    $User->select();

    M方法也可以支持跨库操作,例如:

    // 使用M方法实例化 操作db_name数据库的ot_user表
    $User = M('db_name.User','ot_');
    // 执行其他的数据操作
    $User->select();

     

    实例化空模型类

    如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了,例如:

    //实例化空模型
    $Model = new Model();
    //或者使用M快捷方法是等效的
    $Model = M();
    //进行原生的SQL查询
    $Model->query('SELECT * FROM think_user WHERE status = 1');

    实例化空模型类后还可以用table方法切换到具体的数据表进行操作

    我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/weekend001/p/3975479.html
Copyright © 2011-2022 走看看