phalco框架的查询

来源:互联网 发布:第二次工业革命 知乎 编辑:程序博客网 时间:2024/06/03 14:33

对phalcon的查询做了详细了解,并不算深入研究哈,知识了解使用方法,

  1. 使用模型查询方法:model::find(array("limit"=>10))

    缺陷:条件有限

    参数列表:

参数描述举例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” => trueshared_lock通过这个选项, Phalcon\Mvc\Model 读取最新的可用数据,并且为读到的每条记录设置共享锁。“shared_lock” => truecache缓存结果集,减少了连续访问数据库。“cache” => array(“lifetime” => 3600, “key” => “my-find-key”)hydrationSets the hydration strategy to represent each returned record in the result“hydration” => Resultset::HYDRATE_OBJECTS

 

  2.使用面向对象的方式来创建查询:

复制代码
$builder = wxArticle::query();        $start = strtotime(date("Ymd",strtotime('-6 day',time())));        $end = time();        $builder->join('WeFengYun\Models\wxArticleUpdate','u.article_id = WeFengYun\Models\wxArticle.id','u');        $builder->columns(array('WeFengYun\Models\wxArticle.article_title'));        switch ($filter) {            case 'hot':                $builder->orderBy('u.article_real_read desc');                break;            case 'new':                $builder->orderBy('WeFengYun\Models\wxArticle.article_ctime desc');                break;            default:                return '';                break;        }        $builder->limit($limit);        print_r($bulider->execute());die;        return $builder->execute();
复制代码

 

  3.使用构建器查询:

    

复制代码
$builder = $this->modelsManager->createBuilder();        $start = strtotime(date("Ymd",strtotime('-6 day',time())));        $end = time();        $builder->from(['a' => 'WeFengYun\Models\wxArticle']);        $builder->join('WeFengYun\Models\wxArticleUpdate','u.article_id = a.id','u');        $builder->columns(array('a.article_title'));        switch ($filter) {            case 'hot':                $builder->orderBy('u.article_real_read desc');                break;            case 'new':                $builder->orderBy('a.article_ctime desc');                break;            default:                return '';                break;        }        $builder->limit($limit);        print_r($bulider->getQuery());die;        return $builder->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相对性能好

复制代码
$phql = 'SELECT            a.article_title            FROM WeFengYun\Models\wxArticle a            LEFT JOIN WeFengYun\Models\wxArticleUpdate u            ON a.id = u.article_id             '.$this->applyFilter($filter).'            LIMIT '.$limit;        print_r($this->ModelsManager->executeQuery($phql));die;        return $this->ModelsManager->executeQuery($phql);
复制代码
原创粉丝点击