链式风格语法


除了简洁查询语法外, cp还提供了更灵活的链式查询语法, 链式查询的语法与原生SQL的写法顺序一致

select()

每一个链式查询总是以select()开始, 首先传入要获取的字段

$this->link->select('*)

insert()

链式风格插入数据

$this->link->insert()

replace()

replace

$this->link->replace()

>只有以上三个方法可开始一个链式风格的数据库操作

from()

要查询的表

->from($table)

where()

查询条件

->where(array('id' => 1))

groupBy()

使用分组

->groupBy(1)

orderBy()

排序

->orderBy(1)

limit()

限制返回条数

->limit(1)

stmt()

执行参数绑定, 返回一个PDOStatement对象

->stmt()

这时接收两个参数

  • bool $execute 是否调用stmt的execute
  • array $prepare_params prepare时的参数

fetchAll()

调用PDOStatement的fetchAll()方法获取数据

->fetchAll(\PDO::FETCH_ASSOC);

至此链式查询的完整语句如下:

$this->link->select('*')
    ->from($table)
    ->where(array('id' => 1))
    ->groupBy(1)
    ->orderBy(1)
    ->limit(1)
    ->stmt()
    ->fetchAll(\PDO::FETCH_ASSOC);

每一个查询都以select开头, 按照原生SQL语法的顺序依次写完, 然后调用stmt执行参数绑定, 最后调用fetchAll获取返回的数据.

PDOStatement::fetchAll()的参数列表请查询PHP手册 >使用链式查询能更灵活的指定返回格式

获取生成的SQL和参数

链式写法可以很放方便的截取生成SQL语句和参数

	$this->link->select('*')
    ->from($table)
    ->where(array('id' => 1))
    ->groupBy(1)
    ->orderBy(1)
    ->limit(1)
	->getSQL();

按顺序写完以后调用->getSQL(), 就可以获得生成的SQL语句和参数:

Array
(
    [sql] => SELECT * FROM table WHERE id = ? GROUP BY 1 ORDER BY 1 LIMIT 1 
    [params] => Array
        (
            [0] => 1
        )

)