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 删除成功或失败