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的例子来说明:

<layout name="Public:header" cache="60" />

<layout name="$content" cache="30" />

<layout name="Public:footer" cache="60" />

这是引入公共布局模板的代码,在displa 调用之前,用$content=thisthis->fetch()的方式获得内容快中的html代码,然后this->assgin($content);最后在Action中用this->display('公共模板完全路径')显示这个公告模板。这样就完成了页面的嵌套。

 

2.数据对象add成功之后,仍可以使用该数据对象操作修改其属性的值,一般用来更改输出到页面的格式,例如一个数据对象存在时间类型的属性,使用自动完成功添加,如果该对象添加完毕后还要显示在页面上,会直接显示时间戳,那么我们就需要在add之后,将该对象的值格式化,重新赋值,在页面上显示。

 

public function insert(){ $Form = D('Form');//new Model('Form'); $Form->create();//封装表单到form对象中,可手动修改对象的值,eg: $Form->title() = 'xxx'; // if(isset($__POST['title'])){ // $Form->add(); // } //如果表单对象封装成功 if($Form->create()){ if(false !== $Form->add()){ //跳转到添加成功页面 $this->success('添加成功!'); }else{ $this->error('数据写入错误!'); } }else{ header("Content-Type:text/html; charset=utf-8"); exit($Form->getError().' [ <A HREF="javascript:history.back()">返 回</A> ]'); } }

 

 

 3.变量输出也可以使用函数,例如:

public function index(){ $this->display(); } 在页面上使用{~$result=(M('Form')->select())}的形式调用函数。剩下的工作就是处理$result集合了。

 

 

   会得到同eg1一样的结果。也就是说在控制器中使用的方法同样可以再模板中使用,就是使用起来稍不大习惯。

   可以再页面上直接使用$create_time|date="y-m-d",###}格式化输出时间,关于在页面上输出函数参考手册7.7.2节。这里摘录一部分:

1、执行方法并输出返回值:

格式:{:function()} 

例如,输出U方法的返回值:

{:U('User/insert')}

编译后的PHP代码是

<?php echo U('User/insert');?>

 

2、执行方法但不输出:

格式:{~function(…)} 

例如,调用say_hello函数:

{~say_hello('ThinkPHP')}

编译后的PHP代码是:

<?php say_hello('ThinkPHP');?>

say_hello需要在Common目录下新建一个common.php 中写。

【Common         公共函数,项目中要用到的自己写的函数,可以在这个文件夹下创建一个名为common.php文件
      这些函数可以用在你项目的各个类,同时也可以在模板变量中使用,TP框架会自动加载。】

 

例如,我们直接输出当前的Public目录下面的menu.html模板文件,使用: 

$this->display('./Public/menu.html');

find()找不到返回值为null

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判断

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值