一、Model类中的部分属性意义及设定
tableName 属性
当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性,例如表名称为 users ,而模型名称为 UserModel ,那么需要在模型类设置:
class UserModel extends Model{
protected $tableName = 'users';
}trueTableName 属性
如果表的前缀跟系统设定的不一致(表名和模型名可能一致)时,需要设定模型的 trueTableName 属性:
class UserModel extends Model{
protected $trueTableName = 'my_user';
}注意 trueTableName 值为完整的表名(包括前缀)。
dbName 属性
dbName 属性定义模型当前对应的数据库名称,只有当前的模型类对应的数据库名称和配置文件不同的时候才需要定义:
protected $dbName = 'cdb';如何获取主键$pk = $Model->getPk(); 二、ThinkPHP 查询数据主要提供以下几类查询:- select:普通查询,同 findAll() 方法,返回二维数组
- find:取得符合查询条件的一条记录,返回一维数组
- getBy动态查询:根据某个字段取得符合查询条件的一条记录
- getField:获取某个字段的值或多个字段的索引数组
- 区间查询:取得符合查询条件的区间记录
- 统计查询:取得符合查询条件的统计数据
- 定位查询:取得符合查询条件的一条或多条记录
- 原生SQL查询:支持以原生 SQL 进行查询或执行操作
详情查看http://www.5idev.com/p-thinkphp_CURD_select.shtml
三、读取数据的例子
读取操作
下面的例子将 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>四、更新数据库的例子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 '没更新任何数据!';
}
}五、删除数据
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();六、连贯操作
连贯操作主方法
连贯操作主方法是指对数据库的操作方法,例如 select(查询)、find(查询一条记录)、getBy动态方法、add(写入)、save(更新)、delect(删除)等。注意:主方法这一称谓并非官方的称呼,而是本教材为了便于理解而定义的。
一个连贯操作中只允许出现一个主方法,且主方法必须要写在连贯操作的最后。本教程对各主方法分别做了详细介绍:
参考:http://www.5idev.com/p-thinkphp_continuous_methods.shtml
七、分布式数据库配置
参考:http://doc.thinkphp.cn/manual/distributed_database.html
配置系统配置文件:
'DB_RW_SEPARATE'=>true,八、事务支持$User->startTrans();
$User->commit();
$User->rollback();转载于:https://my.oschina.net/bugyang/blog/109123
