7.4. 访问模型

7.4.1. 存入数据库
7.4.2. 查询
7.4.3. 删除
7.4.4. 更新
7.4.5. 事务

利用dar可以很方便地访问、操作模型,具体请参见API文档中的util.dar包。

7.4.1. 存入数据库

直接调用模型的save方法即可将模型数据存入数据库表中。对于上面的TLog:

$log TLog::manager()->create();
$log->title "我的生日";
$log->content "生日歌唱起来了,我们快乐地跳舞,那一天,我感到很幸福";
$log->categoryId 1;
$log->submitDate date("Y-m-d H:i:s");
$log->save();

这样就将$log这个实例存入了数据库。

也可以一次性地将所有字段的值以数组形式传入:

$log TLog::manager()->create(array(
    
"title" => "我的生日",
    
"content" => "生日歌唱起来了,我们快乐地跳舞,那一天,我感到很幸福",
    
"categoryId" => 1,
    
"submitDate" => date("Y-m-d H:i:s")
));
$log->save();

或者:

$log TLog::manager()->create();
$log->save(array(
    
"title" => "我的生日",
    
"content" => "生日歌唱起来了,我们快乐地跳舞,那一天,我感到很幸福",
    
"categoryId" => 1,
    
"submitDate" => date("Y-m-d H:i:s")
));

7.4.2. 查询

在上面的例子中 TLog::manager()
得到是TLog的管理器,通过它不仅可以生成(create())一个模型对象,还可以对模型对象进行查询。

7.4.2.1. 查询单个模型对象

查询单个模型对象的方法有以下几个:

IDarDomain find (mixed $id)

通过主键ID查找模型对象

IDarDomain findByQuery (array $query)

通过查询条件查找,可以在“查询条件的参数”一节查看该查询条件的参数说明。

IDarDomain findByFields(array $array)

根据一组字段的值查找单个模型对象

7.4.2.2. 查询多个模型对象

查询多个模型对象的方法有以下几个:

array findAll(array $query = null)

根据条件查询所有相关记录

array findAllByFields(array $array)

使用字段值查找

array findAllInArray($field, array $array)

查找字段值在数组中的记录

7.4.2.3. 检查模型对象是否存在

boolean exists($param)

检查是否存在

7.4.2.4. 计算结果集的数目

integer count(array $query = null)

根据条件计算记录数

7.4.2.5. 执行“原生”SQL

PDOStatement exec($sql, array $params = null)

执行原生SQL语句,并返回PDOStatement对象

7.4.3. 删除

可以用模型本身的delete方法,删除对象,并返回影响的记录数:

$log TLog::manager()->find(5);
$log->delete();

7.4.4. 更新

对已有的对象进行更新同样可以使用save方法:

$log TLog::manager()->find(5);
$log->title "test 2";
$log->save();

不用担心会新插入一条数据,save方法会智能地判断该对象有无存储过。

如果一个对象没有任何改变,就调用save方法,那么save就会自动不执行任何操作,避免不必要的查询,提高了效率。

7.4.5. 事务

可以使用sqlmap的beginTranscation,commit,rollBack方法:

public function appIndex() {
    try {
        
$this->getDarProvider()->getSqlMap()->beginTransaction();
        
//此处执行查询

        
$this->getDarProvider()->getSqlMap()->commit();
    } catch (
IDbException $e) {
        
$this->getDarProvider()->getSqlMap()->rollBack();
    }
}