NotORM使用介绍


上一次写过一篇关于安装NotORM的方法( 点击查看),本篇介绍的 是如何通过其来实现数据的操作。

参考地址: http://www.notorm.com



1.建立连接,注意编码问题:

        mysql编码 ,PHP端的header, 浏览器<meta>,file文件本身的编码
        必须保持一致!

header
('Content-type: text/html;charset=utf-8');//申明格式
require_once '../vendor/NotORM.php';

$pdo = new PDO("mysql:dbname=dbname","root","root");
$pdo->exec('set names utf8');//不加会乱码,申明格式
$structure = new NotORM_Structure_Convention(
$primary = "", // id_$table
$foreign = "", // id_$table
$table = "", // {$table}s
$prefix = "tp_" // tp_$table//表前缀
);
$db = new NotORM($pdo,$structure);

Database

$db = new NotORM($pdo[, $structure[, $cache]]) Get database representation
$db->debug = true Call error_log("$file:$line:$query; -- $parameters") before executing a query
$db->debug = $callback Call $callback($query, $parameters) before executing a query, if $callback would return false then do not execute the query
$db->debugTimer = $callback Call $callback() after executing a query
$db->rowClass = 'ClassName' Derive row objects from this class (defaults to 'NotORM_Row')
$db->transaction = $command Assign 'BEGIN''COMMIT' or 'ROLLBACK' to start or stop transaction



2.查询

单行查询用:$db->table->fetch
多行查询用:$db->table;  配合两个foreach

查询:

Result

$table = $db->$tableName([$where[, $parameters[, ...]]]) Get representation of table $tableName  ,查询$table所有信息
$table->where($where[, $parameters[, ...]]) Set WHERE (explained later) where
$table->and($where[, $parameters[, ...]]) Add AND condition,对where的补充,and并且
$table->or($where[, $parameters[, ...]]) Add OR condition      OR或
$table->order($columns[, ...]) Set ORDER BY, can be expression ("column DESC, id DESC")  排序
$table->order("") Reset previously set order 重置先前的排序  
$table->select($columns[, ...]) Set retrieved columns, can be expression ("col, MD5(col) AS hash"
$table->select("") Reset previously set select columns  重置之前设置选择列,选择字段,同TP的field
$table->limit($limit[, $offset])  Set LIMIT and OFFSET,[num,offset],分别对应条数和开始下标
$table->group($columns[, $having]) Set GROUP BY and HAVING
$table->union($table2[, $all]) Create UNION
$table->lock($exclusive) Append FOR UPDATE (default) or LOCK IN SHARE MODE (non-exclusive)
$array = $table->fetchPairs($key, $value) Fetch all values to associative array
$array = $table->fetchPairs($key) Fetch all rows to associative array
count($table) Get number of rows in result set   计算结果数量
(string) $table Get SQL query   获取SQL执行
$table($where[, $parameters[, ...]]) Shortcut for $table->where() since PHP 5.3
对照上表
 
1.$table = $db->tp_img();  //SELECT * FROM tp_img
2.$db->tp_img()->fetch('title');//SELECT title FROM tp_img

$where = array('field1'=>111,'field2'=>222);其他条件,拆开单用,合起来用道理相同,这里复合起来统一说明
3.$tp_img = $db->tp_img()
->select('id,title,sort,info') //设置获取字段,相当于TP ->field
->where($where)//关联数组,与TP用法相同
->where("field3", $db->tp_img()) //二次查询,field IN (SELECT $primary FROM $tableName)"//默认返回的是查询结果的ID
->and('field4 like ?','%aa')//where条件的扩展,注意like书写格式
->order('sort ASC,id ASC')//order,排序
->limit(10,1);//[num,offset],分别对应条数和开始下标,同TP
$sql = "SELECT id,title,sort,info FROM tp_img WHERE (field1 = 111) AND (field2 = 222) AND (field IN ('9', '10')) AND (field3 like ?) ORDER BY sort ASC,id ASC LIMIT 10 OFFSET 1";

但是查询的返回值,大家在用的时候,是对象格式,不能直接使用,得转换一下,那么请看下边的方法。

使用

foreach ($table as $id => $row) Iterate all rows in result,迭代中所有行的结果
$row = $db->{$tableName}[$id] Get single row with ID $id from table $tableName (null if the row does not exist)
通过ID获取表table中单行的值
$row = $table[$id] Get row with primary key $id from the result,从结果中获取主键值
$row = $table[array($column => $value)] Get first row with $column equals to $value
$row = $table->fetch() Get next row from the result
$data = $row[$column] Get data from column $column  从元素中获得值
$row2 = $row->$tableName Get row from referenced table    从引用表行
$table2 = $row->$tableName([$where[, $parameters[, ...]]]) Get result from referencing table   从引用表得到结果
$table2 = $row->$tableName()->via($column) Use non-default column (e.g. created_by)
foreach ($row as $column => $data) Iterate all values in row     遍历所有值的行
count($row) Get number of columns in row     得到的列数行
(string) $row Get primary key value        获取主键值


4.使用,对照上表,$table为上边查询出来的返回结果,不能直接用,得转换【括起来的为常用的】
foreach ($table as $id => $row){
$db->tp_img[$id]; //从tp_img表中获得单行的主键ID值
var_dump( $table[array('column' =>'value')] ); //【!!!获得第一行column = value的值】
echo $table[$id]; //返回单行结果的主键ID
echo $row['column']; //【!!!可以直接输出要查询的数据,column为字段名】
$re = $row->tp_img(); //object(NotORM_Row)
$re = $row->tp_img('id'); //object(NotORM_MultiResult)
$re = $row->tp_img()->via('classname'); //object(NotORM_MultiResult)
foreach ($row as $column => $data){} //【!!!每行的column与value值】
echo count($row); //【结果集$row中的个数】
echo (string) $row; //返回单行结果的主键ID
var_dump($table); //object(NotORM_Result)
var_dump($id); //【!!!返回单行结果的主键ID】
var_dump($row); //object(NotORM_Row)
}
foreach ($row as $column => $data){
$res[$id][$column] = $data;
print_r($column); //表中的字段名称column,eg:id |name |age,(注意一次循环只一个值)
print_r($data); //对应【该字段】的value值,eg:01 | 张三 | 10 (注意一次循环只一个值)
}
/**
* 方法一。转换数据结构,从对象类型转换成二维数组
* @param $obj
* @return array 二维数组
*/
function get_array($obj){
$arr = array();
foreach ($obj as $objSingle) {
$arrRow = array();
foreach ($objSingle as $key => $value) {
$arrRow[$key] = $value;
}
$arr[] = $arrRow;
}
return $arr;
}

/**
* 方法二。迭代器处理,转换数据结构,从对象类型转换成二维数组,
* @param $obj
* @return array 二维数组
*/
function iterator_array($obj) {
foreach($obj as $row) { $ret[] = iterator_to_array($row); }
return $ret;
}
但是方法二lterator比方法一get_array运行效率高1.5倍

转自: http://stackoverflow.com/questions/12092281/notorm-how-to-fetch-data



3.插入:

$row = $db->$tableName()->insert($array) Insert a row into table $tableName and return the inserted row //返回
$row = $db->$tableName()->insert($array, ...) Insert multiple rows by a single INSERT and return the first row//
用一条insert插入多条数据返回第一条的数据
$row = $db->$tableName()->insert_multi(array($array, ...)) Insert multiple rows by a single INSERT and return the number of inserted rows
用一条insert插入多条数据返回第一条的数据,比第二条简介
$affected = $db->$tableName()->insert($result) Insert all rows of the result into $tableName using INSERT.. SELECT//插入查出来的info
$affected = $table->update($array) Update all rows in table result
$affected = $table->insert_update($unique, $insert, $update) Insert row or update if it already exists,插入或更新操作,就看$unipue是否存在了
$affected = $table->delete() Delete all rows in table result
$affected = $row->update($array) Update single row
$affected = $row->update() Update single row by real modifications ($row[$column] = $value or $row->$tableName = $row2)
$affected = $row->delete() Delete single row
$insert_id = $db->$tableName()->insert_id() Get last insert ID
$db->freeze = true Disable persistence


 
$insert_arr = array('uid'=>13,'text'=>'test','classid'=>111);//一条数据
$insert_arr2 = array('uid'=>13,'text'=>'test222','classid'=>222);//一条数据
$insert_arrs = array($insert_arr,$insert_arr,$insert_arr,$insert_arr,$insert_arr);//5条数据
$re = $db->img()->insert($insert_arr);//返回 object(NotORM_Row)
echo $insert_id = $db->img()->insert_id();//最后一个插入的ID
$re = $db->img()->insert($insert_arr,$insert_arr,$insert_arr,$insert_arr,$insert_arr);//返回插入的条数:5
echo $insert_id = $db->img()->insert_id();//返回插入5条中第一条的主键ID
echo $re = $db->img()->insert_multi($insert_arrs);//返回插入的条数:5
echo $insert_id = $db->img()->insert_id();//返回插入5条中第一条的主键ID
$db->img()->insert_update(array('id'=>18),$insert_arr,$insert_arr);//若id=18这条数据不存在,插入$insert_arr,存在,更新$insert_arr2,返回【插入条数|更新字段数】


4.更新:

$re = $db->img()->where('id',30);//返回 object(NotORM_Row)
$re->update($insert_arr2);//返回更新成功的条数


5.删除:
 $db->img()->delete()//清空img表,返回删除的条数
$re= $db->img()->where('id',31);//查询出id=31的数据返回 object(NotORM_Row)
$re->delete();//删除id=31的数据,返回删除的条数,失败返回0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值