ThinkPHP 学习笔记 (二) Model模型操做

1、Model类中的部分属性意义及设定
tableName 属性
当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性,例如表名称为 users ,而模型名称为 UserModel ,那么须要在模型类设置: php

class UserModel extends Model{
    protected $tableName = 'users'; 
}

trueTableName 属性
若是表的前缀跟系统设定的不一致(表名和模型名可能一致)时,须要设定模型的 trueTableName 属性:

class UserModel extends Model{
    protected $trueTableName = 'my_user'; 
}

注意 trueTableName 值为完整的表名(包括前缀)。
dbName 属
dbName 属性定义模型当前对应的数据库名称,只有当前的模型类对应的数据库名称和配置文件不一样的时候才须要定义: html

protected $dbName = 'cdb';
如何获取主键
$pk = $Model->getPk();
 2、ThinkPHP 查询数据主要提供如下几类查询:
  1. select:普通查询,同 findAll() 方法,返回二维数组
  2. find:取得符合查询条件的一条记录,返回一维数组
  3. getBy动态查询:根据某个字段取得符合查询条件的一条记录
  4. getField:获取某个字段的值或多个字段的索引数组
  5. 区间查询:取得符合查询条件的区间记录
  6. 统计查询:取得符合查询条件的统计数据
  7. 定位查询:取得符合查询条件的一条或多条记录
  8. 原生SQL查询:支持以原生 SQL 进行查询或执行操做

详情查看http://www.5idev.com/p-thinkphp_CURD_select.shtml thinkphp

3、读取数据的例子 数据库

读取操做
下面的例子将 user 表的全部数据读取出来并显示: 数组

public function read(){
    $Dao = M("User");
    
    // 查询数据
    $list = $Dao->select();
    //dump($list);	// 用 dump() 能够在调试阶段查看数据是否已读取

    // 模板变量赋值
    $this->assign("list", $list);
    // 输出模板
    $this->display();
}
数据显示模板

模板文件用于显示刚才读取的 User 表的数据。在学习阶段,要不想使用模板,也能够直接使用 foreach 语法在 read() 操做内直接显示读取的数据。下面是模板相应的代码片断,咱们将读取的数据在一个表格中显示出来: 分布式

<table border="1">
    <tr>
        <th width="10%">ID</th>
        <th width="30%">用户名</th>
        <th width="30%">电子邮件</th>
        <th>注册时间</th>
    </tr>
    <volist name="list" id="vo">
    <tr>
        <td align="center">{$vo['uid']}</td>
        <td>{$vo['username']}</td>
        <td>{$vo['email']}</td>
        <td>{$vo['regdate']|date='Y-m-d H:i',###}</td>
    </tr>
    </volist>
</table>
4、更新数据库的例子
public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    // 须要更新的数据
    $data['email'] = 'Jack@163.com';
    // 更新的条件
    $condition['username'] = 'Jack';
    $result = $Dao->where($condition)->save($data);
    //或者:$resul t= $Dao->where($condition)->data($data)->save();

    if($result !== false){
        echo '数据更新成功!';
    }else{
        echo '数据更新失败!';
    }
}
使用setField更新单个字段
public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    $result = $Dao->where('uid = 2')->setField('email','Jack@163.com');

    if($result !== false){
        echo '数据更新成功!';
    }else{
        echo '没更新任何数据!';
    }
}
使用setField更新多个字段
public function update(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    $result = $Dao->where('uid = 28')->setField(array('username','email'),array('Jack','Jack@163.com'));

    if($result !== false){
        echo '数据更新成功!';
    }else{
        echo '没更新任何数据!';
    }
}

5、删除数据 ide


public function del(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    // 删除 uid=5 的数据记录
    $result = $Dao->where('uid = 5')->delete();

    if($result !== false){
        echo '删除 ',$result,' 条数据。';
    }else{
        echo '删除数据失败!';
    }
}

delete() 方法能够用于删除单个或者多个数据,主要取决于 where() 删除条件。另外也能够配合连贯操做中的其余方法如 order()、limit() 等构造出更符合须要的删除条件: 学习

$Dao = M("User");
$result = $Dao->where('status=0')->order('regdate ASC')->limit('5')->delete();

6、连贯操做 ui

连贯操做主方法
this

连贯操做主方法是指对数据库的操做方法,例如 select(查询)、find(查询一条记录)、getBy动态方法、add(写入)、save(更新)、delect(删除)等。注意:主方法这一称谓并不是官方的称呼,而是本教材为了便于理解而定义的。

一个连贯操做中只容许出现一个主方法,且主方法必需要写在连贯操做的最后。本教程对各主方法分别作了详细介绍:

  1. 写入数据方法:add
  2. 查询数据方法:select find getBy动态查询 getField 统计查询 定位查询
  3. 更新数据方法:save setField
  4. 删除数据方法:delete

参考:http://www.5idev.com/p-thinkphp_continuous_methods.shtml

7、分布式数据库配置
参考:http://doc.thinkphp.cn/manual/distributed_database.html
配置系统配置文件:

'DB_RW_SEPARATE'=>true,
8、事务支持
$User->startTrans(); 
$User->commit();
$User->rollback();
相关文章
相关标签/搜索