ThinkPHPModel

Posted on Posted in thinkphp
Tips: 本文创建于2014年5月14日,已超过 2 年,内容或图片可能已经失效!

目录

配置数据库参数

修改配置文件
配置tp/Common/config.php

[code lang="php"]
<?php
return array(
//'配置项'=>'配置值'
/* 数据库设置 */
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => '127.0.0.1', // 服务器地址
'DB_NAME' => 'test', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => 'password', // 密码
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => 'sw_', // 数据库表前缀
'DB_FIELDTYPE_CHECK' => false, // 是否进行字段类型检查
'DB_FIELDS_CACHE' => true, // 启用字段缓存
'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8
) ;
[/code]

C调用M

创建具体model,一个表对应一个model
1. 在控制器里边实例化Model模型对象
① $goods = new \Model\GoodsModel(); //object = GoodsModel
② $obj = D('Goods');
//object = Model
操作的数据表仍然是sw_goods

$obj = D();
//object = Model(不与具体数据表关联)
//可以执行许多原生sql语句
③ $obj = M(模型名称); 或 $obj = M();
M()方法与D方法使用效果完全一致。

thinkPHP开启smarty模版引擎

在tp/Common/conf/config.php中添加

[code lang="php"]
//smarty
'TMPL_ENGING_TYPE' => 'Smarty',
[/code]

在页面底部显示日志信息

同样配置config.php

[code lang="php"]
// 显示底部日志信息
'SHOW_PAGE_TRACE' => TRUE,
[/code]

查询(C中)

C中查询select,返回一个二维数组

[code lang="php"]
function showlist2(){
$obj = D("Goods");
//① select()使用
$info = $obj -> select();
//show_bug($info);

//② select(主键数字)使用
$info = $obj -> select(11);

//③ select(主键字符串)
$info = $obj -> select("20,22,24");

//把数据传递给模板使用
//function Controller::assign(){
// $smarty -> assign();
//}
$this -> assign('info',$info);

$this -> display();
}
[/code]

各种查询条件设置,field,where,limit,order,distinct,having
【各种查询条件设置】
1. 针对指定字段进行查询
fields("字段1,字段2,字段3")

2. group by
每个品牌价格最高的商品信息
select goods_brand_id,max(goods_price) from sw_goods group by goods_brand_id

3. having使用
给sql语句设置条件,与where使用效果完全一致,有些场合where和having可以互换使用。
where:设置条件的字段在数据表中必须存在。
having:设置条件的字段必须是查询结果集的字段
① where和having互换使用
select goods_name,goods_price from sw_goods where goods_price>1000
select goods_name,goods_price from sw_goods having goods_price>1000
② 只能使用where,不能使用having
select goods_name from sw_goods where goods_price > 1000
select goods_name from sw_goods having goods_price > 1000 [错误]
③ 只能使用having,不能使用where
查询每个品牌的平均价格
select goods_brand_id,avg(goods_price) from sw_goods group by goods_brand_id
查询每个品牌的平均价格大于1500元的品牌信息
select goods_brand_id,avg(goods_price) as ag from sw_goods group by goods_brand_id having ag>1500
select goods_brand_id,avg(goods_price) as ag from sw_goods where ag>1500 group by goods_brand_id [错误]

相关条件方法使用:
where、field、limit都是父类Model里边存在的现成方法。
order、having、group、distinct等等方法在Model里边没有直接存在,而是在魔术方法__call里边给封装好的。
以上这些方法在调用的时候有连贯操作的个性,并且方法的前后顺序没有要求。
例如:$obj->field('goods_name,goods_price')->where("goods_name like '三%'")->order('goods_price asc')->select();
$this->options['field'] = $field;

[code lang="php"]
function showlist(){
//各种查询条件设置
$obj = D("Goods");
//① 根据指定字段查询
$info = $obj -> field('goods_id,goods_name') ->select();

//② 设置where条件查询
//select from table where goods_name like '诺%' and goods_price > 1000
$info = $obj -> where("goods_name like '诺%' and goods_price>1000") -> select();

//③ 设置limit限制条数
//limit 偏移量,长度
//limit(5) 只获得前5条信息
//limit(偏移量,长度)
$info = $obj -> limit(4)->select();
$info = $obj -> limit(4,4)->select();

//④ 排序查询
//order(排序条件)
$info = $obj -> order('goods_price desc')->select();

//⑤ 去除重复信息,获取唯一品牌信息
//注意:distinct需要与field结合使用,并且有顺序要求
//$info = $obj ->distinct('goods_brand_id')->field('goods_brand_id') ->select();

//⑥ having设置条件
$info = $obj -> having("goods_price>1000")->select();
show_bug($obj);
$this -> assign('info', $info);

$this -> display();
}
[/code]

find,返回一个一维数组.
getByXXX,查找指定字段。

[code lang="php"]
function showlist3(){
$obj = D('Goods');
$info = $obj -> find(34);
$info = $obj -> find("41,43,46");

//对象调用了类里边不存在的方法,但是成功了
$info = $obj -> getByGoods_name('P807');

show_bug($info);

$this -> display();
}
[/code]

模型->聚合函数

都是最后被调用,前面可设置具体条件
count()
max()
min()
avg()
sum()

{literal}
中间内容smarty不解析
{/literal}

tp框架已经封装了以上函数

[code lang="php"]
function showlist(){
$obj=D("Goods");
//1、查询商品表里的记录总书目,count()调用是最末尾的方法
$total =$obj->count();
$obj->where("Goods_price>100")->count();

//2、获得字段的算术和
$he = $obj->sum('goods_price');

//3、最大,最小值信息
$numMax = $obj->max('goods_price');

$info=$obj->select();
$obj->assign('info',$info);
$this->display();
}
[/code]

自定义sql语句

查:qurey();

[code lang="php"]
function showlist(){
$obj = D();
//获得每个品牌商品的平均价格 avg() group by
$sql = "select goods_brand_id,avg(goods_price) as ag from sw_goods group by goods_brand_id";
$info = $obj->qurey($sql); // 以二维数组形式返回结果,如果结果为空,则返回一个空数组
show_bug($info);
}
[/code]

添加、修改、删除:execute(sql语句)
execute($sql)返回当前sql语句执行受影响的记录条数

[code lang="php"]
function showlist(){
$obj = D();
$sql = "update sw_goods set goods_price=99 where goods_id>90"
$info = $obj->execute($sql);
show_bug($info);
}
[/code]

数据添加

add();
两种形式
$obj->add(数组);
在tp框架中AR是假的,高仿!
AR(活跃记录active record)方式添加数据
a、数据库中的数据表就对应程序的一个model类
b、数据表中的每一条记录就对应一个model类中的一个对象
c、数据表中的每一个字段就对应对象中的成员属性

[code lang="php"]
//方法一
$obj = D("Goods");

$shuju = array(
//数组是关联数组,下标是数组表字段的信息
'goods_name' => '饼干',
'goods_weight' => '20',
'goods_number' => '12',
'goods_price' => '60',
);
// add执行会把新记录的主键ID值返回
$info = $obj->add($shuju);
show_bug($info);
$this->display();

方法二
$obj = D("Goods");

$obj->goods_name = 'tcl';
$obj->goods_price = '100';
$obj->goods_weigth = '10斤';
$obj->number = '4';
// 一样返回ID值
$info = $obj->add();

show_bug($info);
$this->display();
[/code]

表单实现数据收集及存储/页面跳转

两种方式
redirect(跳转地址,url地址参数,延迟事件,提示信息); //简单跳转,对提示信息无复杂要求
对smarty不好用,要改造父类Controller.class.php
success(提示信息,跳转地址)/error(); // 对提示信息有样式要求

[code lang="php"]
function tianjia(){
$obj = D("Goods");
if(!empty($_POST)){
// create方法帮组我们手机POST表单信息,之后把信息放入模型对象的属性data里面
$obj->create();
$res = $obj ->add();
if($res){
// 跳转
$this->redirect('Goods/showlist',array(),3,'添加商品成功,3s后跳转');
// $this->success('添加商品成功',U('Goods/showlist'));
}else{
echo "失败";
}
}else{
$this->display();
}
}
[/code]

数据修改实现

方法save();
两种形式,与add相同
$obj->save(数组);
在tp框架中AR是假的,高仿!
AR(活跃记录active record)方式添加数据
a、数据库中的数据表就对应程序的一个model类
b、数据表中的每一条记录就对应一个model类中的一个对象
c、数据表中的每一个字段就对应对象中的成员属性

[code lang="php"]
function upd() {
$shuju = array (
// 'goods_id' => '34', //注意:或有主键或者有where语句
'goods_name' => 'rename1',
'goods_price' => 'reprice1'
);
$obj = D ( "Goods" );
$res = $obj->where ( 'goods_id=67' )->save ( $shuju ); //注意:或有主键或者有where语句

$this->display ();
}
[/code]

业务修改

tp框架传值
http://www.tp.com/分组/控制器/方法/goods_id/value/addr/value

[code lang="php"]
// 接受参数,形式参数即接受
// 方法有两个逻辑功能:展示和收集
function upd($goods_id) {
$obj = D ( "Goods" );
if (! empty ( $_POST )) {
// 收集表单信息
$obj->create ();
$res = $obj->save ();
if ($res) {
$this->success ( "修改信息成功", U ( 'showlist' ) );
} else {
$this->error ( "修改失败", U ( 'showlist' ) );
}
} else {

$info = $obj->find ( $goods_id );
$this->assign ( 'info', $info );
$this->display ();
}
}
[/code]

删除操作

delete(主键值) 方法
where(id>10)->delete();

[code lang="php"]
function del(){
$obj = D("Goods");
// 返回的是影响的值
$res = $obj->delete(93);
$res = $obj->delete('93,94,95');
$this->display;
}
[/code]

默认分组设置

在Common/Conf/config.php中的数组配置中添加
[code lang="php"]
'MODULE_ALLOW_LIST' => array('Home','Admin'),
'DEFAULT_MODULE' => 'Home',
[/code]
这样,访问url时,就可以不用写分组Home,默认即可

» 转载请注明来源:呢喃 » ThinkPHPModel

Leave a Reply

Your email address will not be published. Required fields are marked *

9 − 6 =