phalco框架的查詢

對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” => 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.使用面向對象的方式來創建查詢:

複製代碼
$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);
複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章