标签:
对phalcon的查询做了详细了解,并不算深入研究哈,知识了解使用方法,
缺陷:条件有限
参数列表:
参数 | 描述 | 举例 |
---|---|---|
conditions | 查询操作的搜索条件。用于提取只有那些满足指定条件的记录。默认情况下 Phalcon\Mvc\Model 假定第一个参数就是查询条件。 | “conditions” => “name LIKE ‘steve%’” |
columns | 只返回指定的字段,而不是模型所有的字段。 当用这个选项时,返回的是一个不完整的对象。 | “columns” => “id, name” |
bind | 绑定与选项一起使用,通过替换占位符以及转义字段值从而增加安全性。 | “bind” => array(“status” => “A”, “type” => “some-time”) |
bindTypes | 当绑定参数时,可以使用这个参数为绑定参数定义额外的类型限制从而更加增强安全性。 | “bindTypes” => array(Column::BIND_TYPE_STR, Column::BIND_TYPE_INT) |
order | 用于结果排序。使用一个或者多个字段,逗号分隔。 | “order” => “name DESC, status” |
limit | 限制查询结果的数量在一定范围内。 | “limit” => 10 / “limit” => array(“number” => 10, “offset” => 5) |
group | 从多条记录中获取数据并且根据一个或多个字段对结果进行分组。 | “group” => “name, status” |
for_update | 通过这个选项, Phalcon\Mvc\Model 读取最新的可用数据,并且为读到的每条记录设置独占锁。 | “for_update” => true |
shared_lock | 通过这个选项, Phalcon\Mvc\Model 读取最新的可用数据,并且为读到的每条记录设置共享锁。 | “shared_lock” => true |
cache | 缓存结果集,减少了连续访问数据库。 | “cache” => array(“lifetime” => 3600, “key” => “my-find-key”) |
hydration | Sets the hydration strategy to represent each returned record in the result | “hydration” => Resultset::HYDRATE_OBJECTS |
2.使用面向对象的方式来创建查询:model::query()->where("type = :type:")->execute();
缺陷:虽然可以使用所有条件,但是使用连接查询的时候如果两个表字段有重复,有可能造成冲突,即主表无法使用别名
3.使用构建器查询:$robots = $this->modelsManager->createBuilder() ->from(‘Robots‘) ->join(‘RobotsParts‘) ->orderBy(‘Robots.name‘) ->getQuery() ->execute();
解决了2中不能使用别名的问题,灵活性很大,单在1.3中$this->modelsManager不能直接使用;
或者使用query/bulider
需要在di中设置,方便使用
$di->set(‘bulider‘, function() {
return new Phalcon\Mvc\Model\Query\Builder();
});
可以这样
$this->bulider->limit(20);
$newarticles = $this->bulider->getQuery()->execute();
也可以这样
$newarticles =$this->bulider->limit(20);
->getQuery()->execute();
或者
$params = array( ‘models‘ => array(‘Users‘), ‘columns‘ => array(‘id‘, ‘name‘, ‘status‘), ‘conditions‘ => array( array( "created > :min: AND created < :max:", array("min" => ‘2013-01-01‘, ‘max‘ => ‘2014-01-01‘), array("min" => PDO::PARAM_STR, ‘max‘ => PDO::PARAM_STR), ), ), // or ‘conditions‘ => "created > ‘2013-01-01‘ AND created < ‘2014-01-01‘", ‘group‘ => array(‘id‘, ‘name‘), ‘having‘ => "name = ‘Kamil‘", ‘order‘ => array(‘name‘, ‘id‘), ‘limit‘ => 20, ‘offset‘ => 20, // or ‘limit‘ => array(20, 20), ); $queryBuilder = new Phalcon\Mvc\Model\Query\Builder($params);
4.使用phql查询:使用sql的形式,虽然比较麻烦,但2.3的查询都会转换为phql,因此phql相对性能好
5.使用原生查询
标签:
原文地址:http://www.cnblogs.com/j-king/p/4554275.html