cakePHP常用数据操作方法总结_基本操作总结

2020-02-27 其他工作总结 下载本文

cakePHP常用数据操作方法总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基本操作总结”。

CakePHP常用数据操作方法总结

0.测试相关信息

1.数据表(1)zmkm_tests Id int(11)primary key Name char(10)Paword char(32)Type tinyint(2)(2)zmkm_relations Id int(11)primary key Test_id int(11)Content text 2.Model:Test,Relation 3.Controller:test,relation 一.查询

1.find($type,$params)I.$params,查询的限制条件,格式如下

$params = array('conditions' => array('SQL中的where条件'), 'fields' => array('查询字段'), 'order' => array('排序字段,SQL中的order by 条件'), 'group' => array('分组字段,SQL中的group by 条件'), 'limit' => 'm,n',// 查询记录条数,SQL中limit 'page' =>'n' // 还有recursive和callbacks等不常用的参数,略过);

II.$type,查询的类型

(1)$type = 'first',find的默认参数,查找符合条件的第一条数据.示例1: 查找数据表中第一条记录

$lists = $this->Test->find();SQL:SELECT `Test`.`Id`, `Test`.`name`, `Test`.`paword`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE 1 = 1

LIMIT 1

结果: $lists = array([“Test”]=>

array(“Id”=>“1”

“name”=>“37892533”

“paword”=>“2f441e566f1bbb7d1faaf32e85035048”

“type”=>“3”))示例2:查找一条type=1的记录

$lists = $this->Test->find('first',array('conditions'=>array('Test.type' => '1')));SQL:SELECT `Test`.`Id`, `Test`.`name`, `Test`.`paword`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE `Test`.`type` = 1

LIMIT 1

结果:$lists = array(“Test”=>

array(“Id”=>“3”

“name”=>“37892533”

“paword”=>“5997124ee980322f8a62a758dda4deee”

“type”=>“1”))

(2)$type = 'all',查找所有符合条件的记录 示例:查找所有type为[1,2,3]的记录

$lists = $this->Test->find('all',array('conditions' => array('Test.type' => array('1','2','3'))));SQL:SELECT `Test`.`Id`, `Test`.`name`, `Test`.`paword`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE `Test`.`type` IN(1, 2, 3)

结果: $lists = array(0 => array('Test'=>array('id'=>1,'name'=>.....)), 1=>array(.....)...);

(3)$type = 'list',返回一个索引数组,key第一列字段,若不指定fields,则value为第二列的字段

示例:查找 10

$condition = array('conditions'=>array('Test.id Between ? And ? ' => array(10,20)), 'order' => 'Test.type desc');$lists = $this->Test->find('list',$condition);SQL:SELECT `Test`.`id`, `Test`.`name` FROM `zmkm_tests` AS `Test`

WHERE `Test`.`id` Between 10 And 20

ORDER BY `Test`.`type` DESC 结果: $lists = array('12' => '47192536' , '10'=>'68192536' ,.....);

(4)$type = 'count' , 计数,返回一个整数 示例:查找type!=(1,2)的记录条数

$con['conditions'] = array('not'=>array('Test.type' =>array(1,2)));$num = $this->Test->find('count',$con);SQL:SELECT COUNT(*)AS `count` FROM `zmkm_tests` AS `Test`

WHERE NOT(`Test`.`type` IN(1, 2))

结果: int(14)(5)$type = 'neighbors',查询符合条件的记录的前后两条记录 示例:查找id=33 且满足 type

$condition = array('field' => 'id',// *(必须 筛选字段)

'value' => '33', // *(必须 field的值)

'conditions' => array('type '3'),'fields'=> 'id,name,type', // *(必须 查找字段));

$lists = $this->Test->find('neighbors',$condition);SQL:执行两条SQL: Query: SELECT `Test`.`id`, `Test`.`name`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE `type`

ORDER BY `Test`.`id` DESC LIMIT 1 Query: SELECT `Test`.`id`, `Test`.`name`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE `type` '33'

ORDER BY `Test`.`id` ASC LIMIT 1 结果: array(2){

“prev”=> array(“Test”=>rray(“id”=>“32”,“name”=>“44392536”,“type”=>“2”))

“next”=> array(“Test”=>array(“id”=>“39”,“name”=>“14292536”,“type”=>“1”)))

2.findByField($params):通过字段查找记录,只返回一条记录,函数名需要用驼峰式书写

示例1:通过数据表中的id查找

$lists = $this->Test->findById('3');SQL:SELECT `Test`.`Id`, `Test`.`name`, `Test`.`paword`, `Test`.`type` FROM `zmkm_tests` AS `Test`

WHERE `Test`.`id` ='3' LIMIT 1 结果:略

示例2:通过数据表中的type查找

$lists = $this->Test->findByType(array('3','5','7'));

SQL:SELECT `Test`.`Id`, `Test`.`name`, `Test`.`paword`, `Test`.`type` FROM `zmkm_tests` AS `Test` WHERE `Test`.`type` IN('3', '5', '7')LIMIT 1 结果:略

注:对于数据表中类似“user_status”的字段,方法名为findByUserStatus()3.Field($field,$condition),查找一个字段,函数返回字段值

示例:查找id=34的paword $paword = $this->Test->field('paword',array('Test.id'=>'34'));SQL:SELECT `Test`.`paword` FROM `zmkm_tests` AS `Test` WHERE `Test`.`id` = '34' LIMIT 1 结果: string(32)“2f441e566f1bbb7d1faaf32e85035048”

二.添加数据

1.save($data),插入一条记录,返回以model名为key值的$data数组(1).$data中无数据表的主键对应的字段值,则插入一条新纪录 示例:插入一条记录

$data = array('name' => 'zhongsou','paowrd' => md5(time()),'type' => rand(0,9));$this->Test->save($data);$lastInsertId = $this->Test->id;

// 插入的一条记录的id SQL: INSERT INTO `zmkm_tests`(`name`, `paword`, `type`)VALUES('zhongsou', '0674ab9bda247f85a5e4aa49ecb73b38', 9)

注:如果$data中存在数据表中没有的字段,则插入时忽略(2).saveAll($data),插入单个模型的多条记录,或者是该模型的关联记录 A.向同一个model插入多条记录,在cakePHP手册中介绍有误,$data数组的格式应该如下: $data = array('0' => array('name' => 'abc' , 'paword' => 'b2c'), '1' => array('name' => '123' , 'paword' => 'p2p'));或者: $data = array('0' => array('Test' =>array('name' => 'abc' , 'paword' => 'b2c')), '1' => array('Test' => array('name' => '123' , 'paword' => 'p2p')));SQL:执行多条insert语句

B.插入关联记录,新建关联表M_relation,test_id为外键,关联M_test(id),关联关系为一对一(hasOne),关联关系需要在model中定义,$data数据格式 $data = array('Relation' => array('test_id' => 3020,'content' => 'www.daodoc.comMIT

(3).$data中有数据表的主键对应的字段值,则修改该记录的相应字段值

$data['Test'] = array('id' => '78','name' => 'zhongsou','paword' => md5(time()),'type' => rand(0,9));$this->Test->save($data);$updataId = $this->Test->id;

// 修改的记录的id SQL:执行两条SQL,进行插入和更新的判断

SELECT COUNT(*)AS `count` FROM `zmkm_tests` AS `Test` WHERE `Test`.`id` = '78' UPDATE `zmkm_tests` SET `name` = 'zhongsou', `paword` = '2816c19a87b69d758799054dc8b4cc2e', `type` = 9 WHERE `zmkm_tests`.`id` = '78'

三.修改

1.updateAll($data,$condition),更改所有符合条件的记录 示例:修改name字段

$data = array('name' => “'souhu'”);$condition = array('Test.name' => 'zhongsou');$result = $this->Test->updateAll($data,$condition);SQL:UPDATE `zmkm_tests` AS `Test` SET `Test`.`name` = 'souhu' WHERE 'Test'.`name` = 'zhongsou'

2.saveField('field',$value),修改一个字段值,需要先指定id 示例:修改id=89 的name $this->Test->id = 89;$this->Test->saveField('name','other');SQL:UPDATE `zmkm_tests` SET `name` = 'other' WHERE `zmkm_tests`.`id` = 89

四.删除

1.delete(),删除一条记录,需要先指定id,返回boolean 示例:删除id=105的记录

$this->Test->id = '106';$result = $this->Test->delete();SQL: SELECT COUNT(*)AS `count` FROM `zmkm_tests` AS `Test` WHERE `Test`.`id` = '106' DELETE `Test` FROM `zmkm_tests` AS `Test` WHERE `Test`.`id` = '106' 2.deleteAll($condition),删除多条记录,$condition为删除条件 示例:删除id>100 & type!= [1,2,3] 的记录

$condition = array('id >' => 100, 'not' => array('type'=>array('1','2','3')));$this->Test->deleteAll($condition);SQL: 分成两条SQL执行的SELECT `Test`.`id` FROM `zmkm_tests` AS `Test`

WHERE `id` > 100 AND NOT(type IN(1, 2, 3))DELETE `Test` FROM `zmkm_tests` AS `Test`

WHERE `Test`.`id` IN('102', '103', '104')

附:若把cakePHP的debug设为2依然无法在页面上打印SQL语句,则可以通过调用如下方法: /**

* 获取SQL执行的日志

* return array */

function printSQL(){ $sources = ConnectionManager::sourceList();$logs = array();foreach($sources as $source){

$db =& ConnectionManager::getDataSource($source);

if(!$db->isInterfaceSupported('getLog'))continue;

$logs[$source] = $db->getLog();} return $logs;}

《cakePHP常用数据操作方法总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
cakePHP常用数据操作方法总结
点击下载文档
相关专题 基本操作总结 操作方法 常用 数据 基本操作总结 操作方法 常用 数据
[其他工作总结]相关推荐
    [其他工作总结]热门文章
      下载全文