`
yxwang0615
  • 浏览: 560793 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

TP学习记录

    博客分类:
  • php
阅读更多

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

 

分享到:
评论

相关推荐

    L2TP协议学习笔记

    L2TP协议学习笔记 L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)是一种基于 PPP(Point-to-Point Protocol,点对点协议)的隧道协议,用于在公共网络中传输 PPP 帧。L2TP 协议学习笔记对 L2TP 协议的主要...

    TP框架学习笔记代码及数据库文件

    【标题】"TP框架学习笔记代码及数据库文件"主要涵盖了两个关键部分:ThinkPHP框架的学习实践和相关的数据库文件。ThinkPHP是中国广泛使用的PHP框架之一,它以简洁、高效的特性受到开发者喜爱,尤其适合快速开发中...

    C4D之TP粒子学习笔记

    但根据标题和描述,可以推断该文档是关于Cinema 4D(简称C4D)中TP粒子系统的使用方法和技巧的学习笔记。 Cinema 4D是德国Maxon公司开发的一款3D建模、动画和渲染软件,它广泛应用于影视特效、游戏开发、建筑设计、...

    Java JDK 5.0学习笔记:TP312JA L393.iso

    Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^

    tp5适合初学者学习,完整资源包【程序数据库静态资源】

    本资源包提供了完整的TP5学习材料,包括程序、数据库和静态资源,旨在帮助初学者快速掌握TP5的使用方法。 首先,让我们深入了解一下TP5的核心特性: 1. **MVC架构**:TP5遵循MVC设计模式,将业务逻辑、数据模型和...

    TP5开发手册

    ### TP5开发手册知识点概述 #### 一、TP5框架简介 - **版本与赞助**:TP5(ThinkPHP5.0)版本是由...通过学习这些知识点,开发者可以更好地掌握TP5框架的核心技术和最佳实践,从而高效地进行Web应用和API服务的开发。

    西门子 TP 170micro、TP 170A、TP 中文手册.zip

    西门子 TP 170 系列触摸屏是工业自动化领域广泛应用的人机界面(HMI)设备,主要型号包括 TP 170micro、TP 170A 和 TP 系列。这些触摸屏提供了直观的操作界面,使得操作员能够与机器或控制系统进行交互,监控生产...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置...

    北京振中TP900S的驱动2.2和管理软件,演示程序,程序编译软件

    "抄表演示程序.zip"可能是一个展示TP900S功能的实例,它包含了预设的操作流程和功能展示,为新用户提供了直观的学习和体验途径。通过运行演示程序,用户可以快速了解TP900S的基本操作和功能特性,为实际应用打下基础...

    tp3.2完整项目

    10. **日志(Logs)**:记录应用程序运行时的信息,帮助调试和优化。 通过学习这样的项目源码,你可以深入理解MVC架构,学习如何组织代码,如何使用ThinkPHP的API,以及如何实现常见的Web应用功能,如用户认证、数据...

    TP5练手项目

    【标题】"TP5练手项目"涉及...8. 错误处理和日志记录:学习如何处理异常,记录系统日志,以便调试和排查问题。 通过这个项目,开发者不仅可以深入理解ThinkPHP5框架,还能提升在实际项目中的开发能力和问题解决能力。

    TP5.1课程源码

    《深入理解ThinkPhp5.1...在提供的"TP5.1课程源码21日至30日"中,可以逐日跟踪学习,结合实际案例,提升对框架的理解和应用能力。无论是新手还是有一定经验的开发者,都能从中受益匪浅,进一步提升自己的PHP开发技能。

    TP5.0企业站开发

    ### TP5.0企业站开发知识点详解 ...通过以上知识点的学习,您将能够深入了解TP5.0框架的核心概念及其在企业级项目中的具体应用。希望这些内容能帮助您更好地掌握TP5.0,从而在实际工作中发挥出更大的价值。

    个人学习资料tp1111

    【个人学习资料tp1111】是一份包含多种IT学习资源的压缩包,标签"2"可能代表了这是第二部分的学习资料或者是按照某种分类标准的第二个主题。由于描述信息较为简洁,"111111"并未提供具体的学习内容,我们将主要依据...

    tp6内容管理通用后台带权限

    `composer.json`定义了项目依赖和配置,而`composer.lock`记录了项目的具体依赖版本,确保在不同环境中安装的依赖包版本一致。 4. `think`:这可能是ThinkPHP框架的启动脚本或命令行工具。 5. `LICENSE.txt`:包含...

    tp5动态读取mysql数据在echarts显示

    在TP5中,我们可以使用内置的DB类来连接、操作数据库,例如执行SQL查询语句,获取特定时间段内的数据记录。 ECharts是一个由百度开发的JavaScript图表库,支持丰富的可视化图表类型,包括折线图。在前端,我们需要...

    以小程序初识tp5.rar

    【压缩包内容】:文件名为“以小程序初识tp5”,推测这可能是一个文档或者笔记,记录了作者在学习tp5框架并尝试将其应用于微信小程序开发过程中的经验和心得。 **详细知识点讲解:** 1. **ThinkPHP5框架基础**:tp...

    tp5购物商场

    订单管理是电子商务中的关键部分,"tp5购物商场"会记录每个订单的详细信息,包括购买的商品、数量、价格、收货地址、支付状态等。系统会自动跟踪订单状态,从下单到支付、发货、确认收货,为用户提供全程的购物体验...

    Weinview TP200 V4.0 编辑软件.rar

    4. **数据记录与分析**:内置数据记录功能,可以定时或触发式保存设备运行数据,便于后期分析和优化生产过程。 5. **报警管理**:用户可以设置和管理各种报警条件,当系统状态异常时,软件会及时显示报警信息,帮助...

    tp5框架的使用

    标题 "tp5框架的使用" 涉及的是ThinkPHP5(简称TP5)这一流行的PHP框架的应用。...TP5是其第五个主要版本,...对于初学者,可以从"php入门资源"中的文件开始学习,逐步了解和熟悉TP5的各个部分,进阶到更高级的Web开发。

Global site tag (gtag.js) - Google Analytics