base_db_model为Ecos的最基本的model基类
{$app_id}_mdl_{$mod_path}
例如: model: b2c_mdl_cart_objects $app_id = b2c $mod_path = cart/objects.php
app/{$app_id}/model/{mod_path}/
例如: b2c_mdl_cart_objects 存放位置: app/b2c/model/cart/objects.php
<?php
class base_mdl_apps extends base_db_model{
...
}
在本app的model/controller里如果需要获取本app的model对象时可用以下方法
<?php
$model = $this->app->model();
<?php
$model = app::get('b2c')->model($model);
有两种方式:
例如:
<?php
class notebook_mdl_notebooks extends base_db_model {
function show_one($goods_id){
...
$sql = sprintf('select name from sdb_b2c_goods where goods_id=%s', $goods_id);
$result = $this->db->select($sql);
return $result;
...
}
}
<?php
class notebook_mdl_notebooks extends base_db_model {
function show_one($goods_id){
...
$sql = sprintf('select name from sdb_b2c_goods where goods_id=%s', $goods_id);
$result = kernel::database()->select($sql);
return $result;
...
}
默认的数据库操作类为base_db_connections
要替换默认的数据库操作类, 可以在config/config.php中添加/修改
define(DATABASE_OBJECT, 'db_class_name');
filter顾名思义为过滤器. 当使用base_db_model所供给的函数getList/count/delete时, 都会隐性调用filter函数, 进行过滤.
一个简单的直观感觉
<?php
$filter = array(
'sex' => 'male',
'age' => array (23, 45, 54)
);
$this->delete($filter);
可猜测以上代码的意图, 删除性别为男性, 年龄为23或45或54的记录.
<?php
clsss base_db_model implements base_interface_model{
...
public function delete($filter){
$sql = 'DELETE FROM `'.$this->table_name(1).'` where '.$this->filter($filter);
if($this->db->exec($sql, $this->skipModifiedMark)){
return true;
}else{
return false;
}
}
...
}
看一下delete函数代码,可知filter将返回sql语句中where子句的部分
在上例中, filter函数将返回
sex='male' and (age=23 or age=45 or age=54)base_db_model提供的filter函数只做最基本的处理, 将$filter数组(参数), 数组单元里值为非数组的做and 拼接, 数组单元里值为数组的做 or拼接.
如果你有特殊需求, 比方说你要处理一个虚拟列, 可以在你些的model里重载filter函数
<?php
class notebook_mdl_notebooks extends base_db_model {
...
function filter($filter){
if (isset($filter['_double_age']){
$where = sprintf(' age=%s and ');
}
unset($filter['_test']);
$return $where.parent::filter()
}
...
}
参数 array $filter 过滤条件 返回 string 返回sql语句where子句
获取此model对应表的表名
<?php
class notebook_mdl_notebooks extends base_db_model {
...
//注意,此处方法名不可与父类方法同名
function tablename(){
var_dump($this->table_name(true)); //完整表名
var_dump($this->table_name(false)); //short表名
}
...
}
app::get('notebook')->model('notebooks')->tablename();
sdb_notebook_notebooks notebooks
参数 bool $real 是否要完整的表名 返回 表名
获取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出的第几条数据开始取 integer $limit 取几条数据, 默认值为-1, 取所有select出的数据 string/array $orderby 排序方式, 默认为无排序 返回 array 二维数组, 多行数据, 每行数据对应表的以行, 所取列由$cols参数控制
多行数据, 在dbschema的type定义为serialize的数据, unserialize.
通过getList取出的数据, 已经经过此处理. 此种处理通常应用于直至通过db calss select的数据
参数: array $rows 通过getList出的数据 array $cols 需要取的列
通过过滤器,取得对应表的数据行数
参数: array $filter 过滤条件 返回: integer 行数
app::get('notebook')->model('notebooks')->count($filter); //根据$filter条件
获取数据库定义文件:$app/dbschema/$model_name定义的dbschema数组
返回: array dbschema定义文件定义的数组
返回在dbschema定义文件中定义为搜索项的列(列属性里定义有searchtype), 详细可见dbschema数据库表定义文件. 可以在自己的model中进行重载.
返回: array 提供搜索的列
更新model所对应表的多行数据
参数: array $data 一维数组, 代表model对应表的一行数据 array $filter 过滤条件
更新model所对应表的多行数据
$data = array( 'name'=>'wuwei', 'sex'=>'male', ); $filter = array('id'=>10); $this->update($data,$filter);
参数: array $data 一维数组, 代表model对应表的一行数据 array $filter 过滤条件 返回 成功 更新影响的条数 失败 false
保存数据,如果需要保存的数据中的字段存在主键,就会以主键为条件,执行更新操作。否则进行插入操作。
$data = array( 'id'=>10, 'name'=>'sunjingrong', 'sex'=>'male', ); $this->save($data);
参数 array $data 新增/更新行数据 返回 成功 1 失败 false
插入单行数据, 会根据dbschema的type做转义处理
$data = array('name' => 'bryant', 'sex' => 'male'); $this->insert($data);
参数 array $data 新增行数库 返回 bool|integer 如果插入成功且此表只有一个主键返回插入的主键ID号, 如果插入成功且此表有多个主键则返回true,失败返回false
删除指定单/多行
$filter = array('id'=>10); $this->delete($filter);
参数 array $filter 过滤条件 返回 bool 删除成功或失败