Onex ecstore(增/删/改/查 )函数
Onex ecstore(增/删/改/查 )函数如下:
系统使用原生SQL
$sql = 'select name from sdb_b2c_goods where 1';
$return = kernel::database()->select($sql);//取出数据是二维数组
$sql = 'select name from sdb_b2c_goods where goods_id='.$goods_id;
$return = kernel::database()->selectrow($sql);//取出数据是一维数组
$sql = 'update sdb_b2c_goods set name='phone' where goods_id='.$goods_id;
$return = kernel::database()->exec($sql);//更新
$sql = 'delete from sdb_b2c_goods where goods_id='.$goods_id;
$return = kernel::database()->exec($sql);//删除
在_filter是对base_db_model中filter的扩展
扩展的数组:
$FilterArray= array(
'than'=>' > '.$var,
'lthan'=>' < '.$var,
'nequal'=>' = \''.$var.'\'',
'noequal'=>' <> \''.$var.'\'',
'tequal'=>' = \''.$var.'\'',
'sthan'=>' <= '.$var,
'bthan'=>' >= '.$var,
'has'=>' like \'%'.$var.'%\'',
'head'=>' like \''.$var.'%\'',
'foot'=>' like \'%'.$var.'\'',
'nohas'=>' not like \'%'.$var.'%\'',
'between'=>' {field}>='.$var[0].' and '.' {field}<'.$var[1],
'in' =>" in ('".implode("','",(array)$var)."') ",
'notin' =>" not in ('".implode("','",(array)$var)."') ",
);
代码:
$filter = array(
'id|than'=>1,//这个表示 id>1
'filter_sql'=>' `name`= wuwei or sex=male', //filter_sql 可以自己写sql语句
);
getList
如果用到 了meta扩展则需要调用dbeav中的getList
或继承dbeav
parent::getList($cols, $filter, $offset, $limit, $orderType);
获取model对应表的单/多行数据, 可根据需要重载,$orderby参数设置排序方式, 会拼接到order by语句后, 可以是数组也可以是字符串. 数组只能设置一种排序方式, 字符串更为灵活
数组:
$orderby = array('name', 'desc');
字符串:
$orderby = 'name desc, id asc, p_order';
例如:
var_dump($this->getList('name, sex', array(), 0, 3,'name desc,id asc'));
输出
array(
0 => array('name' => 'laoda', sex=>'male',
1 => array('name' => 'laoer', sex=>'femail'
)
参数
string $cols 设置要取哪些列的数据
array $filter 过滤条件,默认为array()
integer $offset 偏移量,从select出的第几条数据开始取 如果使用 $orderby此项不可为空
integer $limit 取几条数据, 默认值为-1, 取所有select出的数据 如果使用 $orderby此项不可为空
string/array $orderby 排序方式, 默认为无排序
返回
array 二维数组, 多行数据, 每行数据对应表的以行, 所取列由$cols参数控制
dump
使用dbeav中的dump进行多表查询
则需要(先进行多表关联)配置$has_many,$_has_one,subSdf
function dump($filter,$field = '*',$subSdf = null)
$subSdf 中是在 var $subSdf 中定义的节点,如果没定义,则是$has_many,$has_one的集合
例:
<?php
class notebook_mdl_members extends dbeav_model{var $has_many = array(
'member_lv'=>'member_lv:append:member_lv_id^member_lv_id', //这表示在member表中有关联了三个表
'pam_account'=>'pam_account@pam:append:member_id^account_id',
'item'=>item:append:member_id^member_id,
);
var $subSdf = array(
'default' => array(
/*第一个参数则是members中所要查询的字段
*第二个参数表示是members表中的子表item的$subSdf,如果在item中没有关联的子表则以 null 代替
*array( 0,2,'item_id DESC' )此参数表示在item子节点中:从0到2取三条记录,按照 item_id DESC 排序
*/
'item' => array('*',null,array( 0,2,'item_id DESC' )),
),'delete'=>array('*'),
);function __construct($app){
parent::__construct($app);
//使用meta系统进行存储
$this->use_meta();
}function item_dump(){
$filter = array(
'member_id'=>10,
);
$aDate = $this->dump($filter,"*",'default');//dump1 输出的是$subSdf 中的item中定义的节点
echo "<pre>";
print_r($aDate);
}
}
得到
Array
(
[member_id] => 10
[member_user] => XXXX
[member_password] => 1e236443e5a30b09910e0d48c994b8e6
[member_time] => 1305280926
[member_email] => XXXX@qq.com
[qq] => 1111111
[item] => Array
(
[3] => Array //注意这里 $subSdf 里面定义的排序
(
[item_id] => 3
[member_id] => 10
[item_subject] => fsdafsd
)
[1] => Array
(
[test1_id] => 1
[member_id] => 10
[item_subject] =>测试测试
)
)
)
注意:用dump进行多表连查则第三个参数是必须,否则查不出数据
delete
使用delete进行多表删除,需要先进行多表关联(配置好has_many,has_one, subSdf)
function delete($filter,$subSdf = 'delete')
接着上面member的model,添加下面的方法
<?php
...
function member_delect(){
$filter = array(
'member_id'=>10,
);
$this->delete($filter,'delete');//会删除在$subSdf 中定义的节点
}
...
得到的数据为空,因为在member表中把member_id = 10 的这条记录给删除了!但是在数据库中可以看到表item把member_id=10
的记录全部删除了,但是表pam_account,中的account_id=10,的数据还没有删除,
因为在执行delete 的时候,节点删除是根据$subSdf中来删除的
注意:$this->delete($filter);如果没有定义删除节点,默认会把所有关联的子表的相关信息删除
update
如果用到 了meta扩展则需要调用dbeav中的update.
更新model所对应表的多行数据
$data = array(
'name'=>'wuwei',
'sex'=>'male',
);
$filter = array('id'=>10);
$this->update($data,$filter);
参数:
array $data 一维数组, 代表model对应表的一行数据
array $filter 过滤条件
返回
成功 更新影响的条数
失败 false
insert
加了一层判断,如果在做插入的时候,有用到过 meta 扩展则要做是否注册此扩展字段
插入单行数据, 会根据dbschema的type做转义处理
$data = array('name' => 'bryant', 'sex' => 'male');
$this->insert($data);
参数
array $data 新增行数库
返回
bool|integer 如果插入成功且此表只有一个主键返回插入的主键ID号,如果插入成功且此表有多个主键则返回true,失败返回false
save
如果需要用save做多表保存或则更新数据需要先进行上面的多表关联操作(配置好has_many,has_one,subSdf)function save(&$data,$mustUpdate = null)
参数
名称 | 说明 | 结构 | 引用 | 必要 |
---|---|---|---|---|
$data | 需保存数据的 | sdf | √ | √ |
$mustUpdate | 必须保存的结构说明 | sdf |
说明
将单条sdf数据通过has_many,has_one配置递归save入数据库,联合主键表不支持递归save,返回bool,主键返回$data
例:刚才删除的时候把表item,member_id = 10,和 表 member,member_id=10中的数据都删除了,现在在保存;
<?php
...
function member_save() {
$filter = Array(
'member_id' => 10,
'member_user' =>'wuwei',
'member_password' => '1234656',
'member_time' => 1305280926,
'member_email' => 'wuweishopex.cn',
'qq' => 123456789,
'item' => Array
(
'1' => Array //注意这里$subSdf里面定义的排序
(
'item_id' => 1,
'item_subject' => 'jjjjjdsgfdgfd',
),'3' => Array
(
'item_id' => 3,
'item_subject' => 'fsadfsdfsdfa',
),)
);
$this->app->model('member')->save($filter);
}
batch_dump
如果需要用batch_dump做多表保存或则更新数据需要先进行上面的多表关联操作(配置好has_many,has_one, subSdf)
function batch_dump($filter,$field = '*',$subSdf = null,$start=0,$limit=20,$orderType = null )
根据$filter条件,getList出多个主键Id
在根据 主键Id dump出多条 subSdf
delete
删除指定单/多行
$filter = array('id'=>10);
$this->delete($filter);
参数
array $filter 过滤条件
返回
bool 删除成功或失败