對phalcon的查詢作了詳細瞭解,並不算深刻研究哈,知識瞭解使用方法,php
缺陷:條件有限html
參數列表:sql
參數 | 描述 | 舉例 |
---|---|---|
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.使用構建器查詢:api
$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);
5.使用原生查詢,未測試app