读书人

TP学习记要

发布时间: 2012-11-08 08:48:11 作者: rapoo

TP学习记录

一、THINKPHP的CURD方法:

所谓CURD。即对数据库操作的四个基本操作(CURD):C:create(创建)、U:update(更新)、R:read(读取)和D:detele(删除)。
这里篇幅有限,只把手册中我测试过的方法写出来:

?

在ThinkPHP使用add方法新增数据到数据库。

使用方法如下:

$User = M("User"); // 实例化User对象

$data['name'] = 'ThinkPHP';

$data['email'] = 'ThinkPHP@gmail.com';

$User->add($data);

或者使用data方法连贯操作

$User->data(array("title" =>"ThinkPHP2.1发布","content" =>"这是内容"))->add();

如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了。

?

?

select()和findAll->()相同;

例如:
$User->where(’status=1′)->order(‘create_time’)->limit(10)->select();
注意:在连贯操作中除了select方法必须放到最后一个外,其他的连贯操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:
$User->order(‘create_time’)->where(’status=1′)->limit(10)->select();

?

注意limit方法的参数,一个参数默认是从索引0开始查找limit(10) 相当于limit('0,10')。而且一个参数的时候可以不加'',当时如果指定了2个参数,必须使用''。所以建议limit的参数都加上单引号(注意单引号的开始结束位置)。

?

find->()方法,和以上两种方法类似。区别在只返回一条数据。

getField->()获取某个字段值。

$list = $User->getField('id,nickname');

返回的list是一个数组,键名是用户的id, 键值是用户的昵称nickname。

$rs = $Form->limit(2)->page(2)->getField('id,nackname');

SELECT id,title FROM `think_User` LIMIT 2,2

dump出来的结果结构如下:

array(2) {
? [3] => string(6) "test"
? [4] => string(6) "测试"
}
所以使用getField最好用于获取1个字段(返回一个数组)或2个字段(返回一个数组,键值对的形式)。我认为volist标签处理的都是二维数组,而这里是个键值对形式的一维数组,所以造成了使用getField在页面上输入的结果集是乱码(源码没研究过,只是猜测)。该方法慎用。

?

一般查询部分字段都采用field方法:

?

field方法:定义要查询的字段
field方法的参数支持字符串和数组,例如,
$Model->field(‘id,nickname as name’)->select();
$Model->field(array(‘id’,'nickname’=>’name’))->select();
如果不使用field方法指定字段的话,默认和使用field(‘*’)等效。


?

U更新,C创建:

data,add,save方法:数据对象赋值,添加,保存。例如:
$data['name'] = ‘ThinkPHP’;
$data['email'] = ‘ThinkPHP@gmail.com’;
$Model->data($data)->add();//新增,相当于insert,连贯写法
$Model->add($data); //新增,相当于insert,非连贯写法
$Model->data($data)->where(‘id=3′)->save(); //修改,相当于update

需要注意的是,save方法的话,如果数据没有变化,那么默认返回的操作是FALSE。但是这个save执行是OK的,这个需要注意。


D删除:

delete->()删除数据
$User->where(’status=0′)->order(‘create_time’)->limit(‘5′)->delete();

二、输出内容到模板:

1.在控制器中指定要输出的变量:

eg:

 public function index(){ $Form = M('Form');//new Model('Form'); $results = $Form->order("id desc")->limit(6)->select(); $this->assign("result", $results); $this->display(); } 

?

在模板中使用{$result}的形式接收,result为assign的键。

?在页面上使用volist标签可以循环输出$result的值.

eg:

<table>
<tr><td>序号</td><td>标题</td><td>内容</td><td>创建时间</td></tr>
<volist name="result" id="vo">
<tr><td>{$i}.</td><td>{$vo.title}</td><td>{$vo.content}</td><td>{$vo.create_time|date='Y-m-d',###}</td></tr>
</volist>
</table>

?

或者 只在Action中this->display();

在页面上编码如下:

{~$result=(M('Form')->select())} 可以达到和上面一样的效果,~是不带返回值,:是采用返回值。

?

?

$this-display()还支持使用display('模板文件名')的方式以全路径调用模板,

?

?

模板输出还可以使用$content=this->fetch(); echo $content;通过变量动态控制输出调用的模板。fetch()用法见手册5.45

?这样做可以将一个页面输出到公共的布局页面中,很灵活。

?

这里拿手册5.46的例子来说明:

thinkphp中,find()方法找不到符合的值返回NULL。测试://数据库中没有该id=1000的数据:if(M('Form')->where('id=1000')->find()){ echo '找到匹配';}else{ echo '未找到匹配';}//这样做认为find()找不到数据返回的是false,其实代码相当于if(null){ echo 'null';}else{ echo 'not null';}//永远输出not null。所以要用isset或者empty判断

?

读书人网 >编程

热点推荐