数据库模型

数据库模型简介

YY框架的数据库模型是一种ORM的提现方式。首先阅读这一小节之前请确保已经阅读过简单模型

因为数据库模型继承自简单模型,所以简单模型的用法对数据库模型统统适用。

继续上一节中的例子:

控制器mmsz.php改为:

//简单模型记录前台密码
$admin = new Model('admin');
$admin->id = Session::get('uid');
if($admin->try_post()){//密码被传入

    if($admin->new != $admin->again){
        Session::once('cperr','两次密码不一致!');
        return;
    }       
    if(!$admin->is_real(array('id','password'))){
        Session::once('cperr','原始密码不正确!');
        return;
    }
    $admin->password = $admin->new;
    if($admin->save()){
        Session::once('cpsuc','密码修改成功!');
    }
}

视图内容mmsz.html:

<div id="content" style="margin: 0px 0px 0px 0px;">
        <!-- content / right -->
        <div id="right" style="margin: 0px 0px 0px 0px;">
            <!-- table -->
            <div class="box" style="margin: 0px 0px 0px 0px;">
                <!-- box / title -->
                <div class="title">
                    <h5>
                    <a href='javascript:;'>密码修改</a>
                    </h5>
                    <div class="search">
                    <button type="button" onclick="goto_back();">返回</button>
                    </div>
                </div>                  
                <form action="mmsz.html" method="post"> {tk()}

                <h4 style="color: red">{Session::flush('cperr')}</h4>
                <h4 style="color: blue">{Session::flush('cpsuc')}</h4>
                <table style="width: 100%" width="100%">
                    <tr>
                    <td style="width: 150px;">
                    原始密码:
                    </td>
                    <td>
                    {$m->password('password','class="formmid"')}
                    </td>
                    </tr>
                    <tr>
                    <td style="width: 150px;">
                    新密码:
                    </td>
                    <td>
                    {$m->password('new','class="formmid"')}
                    </td>
                    </tr>
                    <tr>
                    <td style="width: 150px;">
                    密码确认:
                    </td>
                    <td>
                    {$m->password('again','class="formmid"')}
                    </td>
                    </tr>
                    <tr>
                    <td colspan="2" align="center" style="border: none;">
                    <button type="submit" style="float:inherit; display: block;">数据提交</button>
                    </td>
                    </tr>
                    </table>                
            </form>
            </div>
        </div>
        <!-- end content / right -->
    </div>

上例控制器中的操作全部是由数据库模型完成的,其中new和again字段在正式的数据库表结构中并不存在, 不用担心在执行save()方法时框架会自动过滤掉数据库中不存在的字段,把变化的字段自动更新到数据库中。

save()既可以新增也可以更新,判断的依据是模型的id属性,不存在id时为新增,存在id时为更新。

方法列表

下面列举的方法是数据库模型中特有的,简单模型中列举过的方法此处就不再列举了。

avg

Model::avg(string $field, miexd $condition, miexd $pam) 
查询并返回某字段的平均值
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
string $field 要查询 的字段 
miexd $condition 条件字符串或条件数组 
miexd $pam 参数数组

Returns:
  integer 平均值 

count

Model::count(string $field) 
计算行数

Parameters:  
string $field 统计的参数(*)

Returns:
  integer 计数

delete

Model::delete(mixed $condition, mixed $pam) 
批量删除数据
如果不传入条件则自动将这个Model的除id之外的其他字段属性作为条件 

Parameters:  
mixed $condition 条件数组或字串     
mixed $pam 参数数组

Returns:
  mixed 删除成功返回删除的条数 失败返回null

field

Model::field(string $select) 
设置查询字段 如:"id,name"

Parameters:  
string $select 要检索的字段

Returns:
  Model 模型本身 

find

Model::find(mixed $id, array $pam) 
根据id或者数组条件填充这个model
示例: find(5) 或 find(array('name'=>'mqq','sex'=>'man'))

Parameters: 
mixed $id 主键或条件数组 
array $pam 参数值的数组

Returns:
  Model 模型本身

get_a_clone

Model::get_a_clone() 
获得一个和此模型一模一样的克隆 
不克隆ID信息

Returns:
  Model 新的模型

get_model_array

Model::get_model_array(string|array $fields) 
获得模型属性信息的数组形式
只包含数据库中已有的字段 不包含ID信息(特殊$fields指定除外)

Parameters:  
string|array $fields 需要特定指定的字段
Returns:
  array 模型的信息数组

get_model_array_with_id

Model::get_model_array_with_id() 
获得模型属性信息的数组形式
只包含数据库中已有的字段 包含ID信息

Returns:
  array 模型的信息数组

has

Model::has(miexd $condition, miexd $pam) 
查询是否含有符合条件的数据
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
miexd $condition 条件字符串或条件数组 
miexd $pam 参数数组

Returns:
  boolean 

has_id

Model::has_id() 
判断该模型是否含有ID
查看数据库中是否有独立的一条数据与model对应

Returns:
  boolean

id

Model::id(string $id) 
设置这个Model的标识id
只是设置主键字段,不执行实际的DB查询操作
一般在更新或删除之前调用

Parameters:

string $id 主键
Returns:
  Model 模型本身

is_real

Model::is_real(string|array $fields, boolean $fillme) 
判断当前model是否在数据库中存在真实的对应

Parameters:

string|array $fields 需要特定指定的字段

boolean $fillme 是否填充当前model 默认:true
Returns:
  boolean

lable

Model::lable(string $field) 
获得某一字段的Lable
默认为数据库中定义的字段注释

Parameters:

string $field 字段名称
Returns:
  string 字段描述 

limit

Model::limit(string $limit) 
设置查询区间

Parameters:

string $limit 区间
Returns:
  Model 模型本身

list_all

Model::list_all(mixed $condition, array $pam) 
查询并返回模型结果集
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
mixed $condition 条件字符串或条件数组 
array $pam 参数数组

Returns:
  array Model实体的集合

list_all方法是列表页面展现前,最常用的查询方式

list_all_array

Model::list_all_array(mixed $condition, array $pam) 
查询并返回数组结果集
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
mixed $condition 条件字符串或条件数组 
array $pam 参数数组

Returns:
  array 字符下标的数组集合

map_array

Model::map_array(string $field1, string $field2, array $res_arr) 
将数据表的的两个字段的对应数据转换为键值数组形式

Parameters:  
string $field1 key   
string $field2 value     
array $res_arr 默认预置数组

Returns:
  array 键值数组

map_array_kmap

Model::map_array_kmap(string $field1, array $farray) 
将数据表的的一个字段的值和多个字段的键值对对应的数据转换为键值数组-Map的形式

Parameters:

string $field1 key

array $farray 要填充到Map的Array(二级键值)
Returns:
  array 一键多值数组 

max

Model::max(string $field, miexd $condition, miexd $pam) 
查询并返回某字段的最大值
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
string $field 要查询 的字段 
miexd $condition 条件字符串或条件数组 
miexd $pam 参数数组

Returns:
  integer 最大值

min

Model::min(string $field, miexd $condition, miexd $pam) 
查询并返回某字段的最小值
如果$condition为数组则根据数组条件返回符合结果的列表
如果$condition是字串则必须是 where语句之后的字串,亦可通过?和$pam数组组合成SQL语句
如果不传入条件则根据where方法 的预设参数查询,如果where未被调用过则列出所有

Parameters: 
string $field 要查询 的字段 
miexd $condition 条件字符串或条件数组 
miexd $pam 参数数组

Returns:
  integer 最小值

order

Model::order(string $order) 
设置查询排序

Parameters:

string $order 排序
Returns:
  Model 模型本身

remove

Model::remove() 
删除本条信息

Returns:
  mixed 删除成功返回 1 失败返回null

save

Model::save() 
保存或更新此条信息

Returns:
  mixed 
验证失败返回false
存储失败返回null
存储成功返回本身

sum

Model::sum(string $field) 
计算某一字段的和

Parameters: 
string $field 参数数组

Returns:
  integer 计数

type

Model::type(string $field) 
获得某一字段的数据类型

Parameters: 
string $field 字段名称

Returns:
  string 字段描述

update

Model::update(array $condition, array $data) 
批量更新信息如果不传入数据$data且存在id则$condition相当于$data并依据ID进行$condition数据更新
如果不传入数据$data且不存在id自动将这个Model的除id之外的其他字段属性作为更新数据

Parameters: 
array $condition 条件数组 
array $data 更新的数据数组

Returns:
  boolean 是否更新成功

where

Model::where(mixed $condition, array $pam) 
传入要查询的条件

Parameters: 
mixed $condition 条件字符串或条件数组 
array $pam 参数值的数组

Returns:
  Model 模型本身