6. 数据的查询、删除和修改

 我们已经创建好了实体,下面就结合一个简单的留言板项目来看看实体的更多应用:数据的查、删、改操作。

1. 查询和删除

(1)DDA (Data Direct Accessor)

DDA的使用很简单,如下例:

class Action_index extends ActionBase
{
    public function _run($request,$xcontext)
    {
        $dda = DDA::ins();
        $info = $dda->list_msg();
        $xcontext->info = $info;
        return XNext::useTpl('index.html');
    }
}

DDA 对象提供方便的对象的获取、删除的方法,可以根据方法名和参数沟通有条件的查询、删除的操作。 方法的规则如下:
[get | list | del]_classname_by_arg1name_arg2name($arg1value,$arg2value)

get 获取单个对象,未找到时 ,返回null
list 获取一批对象,为空时返回空数组
del 删除一批对象,无返回值
例如本例中用list_msg()获取msg数据表中所有的数据,返回对象的数组。在展示页面index.html输出对象时要注意:

1. 在输出msg数据表的数据时,id,ver,createtime和updatetime四个属性不能按照对象成员输出,
而应该按照方法来输出,即:
echo $info[$i]->id; (错误)
echo $info[$i]>id();	(正确)
我们自定义的属性则按照正常成员输出,例:echo $info[$i]->name;

2. 用DDA获取到的实体对象是可直接访问其关联的实体的,例如:
echo $info[$i]->person->phone;
由于我们已经建立了msg关联person,所以在用DDA查询获取msg对象时可直接访问
其关联实体person下的成员或者方法。

(2)DQuery

DQuery和DDA非常相似:

class Action_index extends ActionBase
{
    public function _run($request,$xcontext)
    {
        $dq = Dquery::ins();
        $info = $dq->list_msg();
        $xcontext->info = $info;
        return XNext::useTpl('index.html');
    }
}
?>

区别:DQuery查询获得的不是实体对象的数组,而是一个数组的数组,即查询到的每一条数据记录都是以数组的形式返回的,而不是像DDA一样以实体对象的形式返回。

(3)自定义查询语句

通过Query对象,自已编写sql,来实现复杂的多表查询或要求高性能的系统。

在/src/logic/bizdomain/dao下添加自定义的Query:

<?php

class msgQuery extends Query
{
    public function display_all()
    {
        $sql = "SELECT * FROM msg";
        return $this->listByCmd($sql);
    }
}
?>

这里我们自己定义了查询方法display_all,自定义的Query可以定义多个不同的查询方法。

注意:类名xxxQuery中的xxx要与数据表名一致

使用:

$info = DaoFinder::query("msgQuery")->display_all();

注意:DaoFinder::query返回值和DQuery一样是数组的数组,而不是对象的数组!!

小结:DDA和DQuery都是提供给我们常用的一些操作,他们的区别只在于返回值不同,DDA在查询关联对象时体现出了强大之处;而Query则能给我们提供自定义查询功能,这点上DDA和Dquery则爱莫能助了~(>_<)~

2. 修改
要完成修改需要在实体中添加业务方法:

<?php
class person extends Entity
{/*{{{*/
    static public function createByBiz($name, $phone, $address)
    {/*{{{*/
        $cls = __CLASS__;
        $obj = new $cls(EntityID::create(strtolower($cls)));
        $obj->name           = $name;
        $obj->phone          = $phone;
        $obj->address        = $address;
        return Entity::createByBiz($obj);
    }/*}}}*/
    public function update($name,$phone,$address)
    {
	    $this->name = $name;
	    $this->phone = $phone;
	    $this->address = $address;
    }
}/*}}}*/

?>

通过DDA或其他方法获取到要修改的对象后直接调用update方法即可:$obj_change->update($new_name, $new_phone, $new_address);

 

 

F.A.H^_^Amber

你可能感兴趣的:(删除,修改,休闲,Pylon,数据的查询)