设为首页 加入收藏

TOP

对象文件映射(ODM (Object-Document Mapper))(二)
2015-07-20 17:34:08 来源: 作者: 【 】 浏览:11
Tags:对象 文件 映射 ODM Object-Document Mapper
robots ordered by name downward

$robots = Robots::find(array(

"conditions" => array("type" => "virtual"),

"sort" => array("name" => -1)

));

可用的查询选项:

参数

描述

例子

条件

搜索条件,用于取只满足要求的数,默认情况下Phalcon_model会假定关联数据的第一个参数为查询条

“conditions” => array(‘$gt’ => 1990)

字段

若指定则返回指定的字段而非全部字,当设置此字段时会返回非完全版本的对

“fields” => array(‘name’ => true)

这个选项用来对查询结果进行排序,使用一个为多个字段作为排序的标准,使用数组来表格,1代表升序,-1代表降

“order” => array(“name” => -1, “status” => 1)

限制

限制查询结果集到指定的范围

“limit” => 10

间隔

跳过指定的条目选取结果

“skip” => 50

如果你有使用sql(关系)数据库的经验,你也许想查看二者的映射表格 SQL to Mongo Mapping Chart . 聚合(Aggregations) ――――――? 我们可以使用Mongo提供的方法使用Mongo模型返回聚合结果。聚合结果不是使用MapReduce来计算的。基于此,我们可以非常容易的取得聚合值,比如总计或平均值等:


$data = Article::aggregate(array(

array(

'$project' => array('category' => 1)

),

array(

'$group' => array(

'_id' => array('category' => '$category'),

'id' => array('$max' => '$_id')

)

)

));

创建和更新记录(Creating Updating/Records)?

Phalcon\Mvc\Collection::save()方法可以用来保存数据,Phalcon会根据当前数据库中的数据来对比以确定是新加一条数据还是更新数据。在Phalcon内部会直接使用 Phalcon\Mvc\Collection 的save或update方法来进行操作。 当然这个方法内部也会调用我们在模型中定义的验证方法或事件等:


$robot = new Robots();

$robot->type = "mechanical";

$robot->name = "Astro Boy";

$robot->year = 1952;

if ($robot->save() == false) {

echo "Umh, We can't store robots right now: \n";

foreach ($robot->getMessages() as $message) {

echo $message, "\n";

}

} else {

echo "Great, a new robot was saved successfully!";

}

“_id”属性会被Mongo驱动自动的随MongId_而更新。


$robot->save();

echo "The generated id is: ", $robot->getId();

验证信息(Validation Messages)?

Phalcon\Mvc\Collection 提供了一个信息子系统,使用此系统开发者可以非常容易的实现在数据处理中的验证信息的显示及保存。 每条信息即是一个 Phalcon\Mvc\Model\Message 类的对象实例。我们使用getMessages来取得此信息。每条信息中包含了 如哪个字段产生的消息,或是消息类型等信息:


if ($robot->save() == false) {

foreach ($robot->getMessages() as $message) {

echo "Message: ", $message->getMessage();

echo "Field: ", $message->getField();

echo "Type: ", $message->getType();

}

}

验证事件和事件管理(Validation Events and Events Manager)?

在模型类的数据操作过程中可以产生一些事件。我们可以在这些事件中定义一些业务规则。下面是 Phalcon\Mvc\Collection 所支持的事件及其执行顺序:

操作

名称

能否停止操作

解释

Inserting/Updating

beforeva lidation

YES

在验证和最终插入/更新进行之执行

Inserting

beforeva lidationOnCreate

YES

仅当创建新条目验证之前执行

Updating

beforeva lidationOnUpdate

YES

仅在更新条目验证之前

Inserting/Updating

onValidationFails

YES (already stopped)

验证执行失败后执行

Inserting

afterValidationOnCreate

YES

新建条目验证之后执行

Updating

afterValidationOnUpdate

YES

更新条目后执行

Inserting/Updating

afterValidation

YES

在验证进行之前执

Inserting/Updating

beforeSave

YES

在请示的操作(保存)运行之前

Updating

beforeUpdate

YES

更新操作执行之前运行

Inserting

beforeCreate

YES

创建操作执行之前运行

Updating

afterUpdate

NO

更新执行之后执行

Inserting

afterCreate

NO

创建执行之后

Inserting/Updating

afterSave

NO

保存执行之后

为了响应一个事件,我们需在模型中实现同名方法:


class Robots extends \Phalcon\Mvc\Collection

{


public function beforeva lidationOnCreate()

{

echo "This is executed before creating a Robot!";

}


}

在执行操作之前先在指定的事件中设置值有时是非常有用的:


class Products extends \Phalcon\Mvc\Collection

{


public function beforeCreate()

{

// Set the creation date

$this->created_at = date('Y-m-d H:i:s');

}


public function beforeUpdate()

{

// Set the modification date

$this->modified_in = date('Y-m-d H:i:s');

}


}

另外,这个组件也可以和 Phalcon\Events\Manager 进行集成,这就意味着我们在事件触发创建监听器。


$eventsManager = new Phalcon\Events\Manager();


//Attach an anonymous function as a listen

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 1035 代码+详细注释 下一篇ZOJ 3209 Treasure Map DLX

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)
·Java真的是要没落了 (2025-12-26 06:20:12)
·C++ Lambda表达式保 (2025-12-26 05:49:45)
·C++ Lambda表达式的 (2025-12-26 05:49:42)