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