任何一个PHP框架在操作数据库时都可以使用连贯操作。
如TP3.2框架中:
再比如Laravel5中:
本篇文章用一个简单的例子,说明框架中如何去实现连贯查询操作。当然,因为是较简单的例子,跟框架中实现方式大不相同,在此希望能起到抛砖引玉的作用。
代码示例
<?php
class Model
{
/**
* 数组用于存放拼接sql的条件
*/
private $options = [
'table' => '',
'fields' => '',
'where' => '',
'order' => ''
];
//$model->table('t1')
public function table($table)
{
$this->options['table'] = $table;
return $this;
}
//$model->table('t1')->fields('a,b,c')
public function fields($fields)
{
$this->options['fields'] = $fields;
return $this;
}
//$model->table('t1')->fields('a,b,c')->where('id=1')
public function where($where)
{
$this->options['where'] = 'WHERE ' . $where;
return $this;
}
//$model->table('t1')->fields('a,b,c')->where('id=1')->order('id desc')
public function order($order)
{
$this->options['order'] = 'ORDER BY ' . $order;
return $this;
}
//$model->table('t1')->fields('a,b,c')->where('id=1')->order('id desc')->select()
public function select()
{
$sql = "SELECT %FIELD% FROM %TABLE% %WHERE% %ORDER% ";
$sql = str_replace(
['%FIELD%' , '%TABLE%' ,'%WHERE%' ,'%ORDER%' ],
[
$this->options['fields'],
$this->options['table'],
$this->options['where'],
$this->options['order']
]
,$sql
);
return $sql;
/**
* 正常逻辑是执行sql语句 本次演示代码直接返回sql语句
*/
}
}
/**
* 调用
*/
$model = new Model();
$sql = $model ->table('t1')
->fields('a,b,c')
->where('id = 1')
->order('id desc')
->select();
var_dump($sql);
//SELECT a,b,c FROM t1 WHERE id = 1 ORDER BY id desc
关键
1.每次调用 table() fields() 或者 where()方法是,都会 return $this 使得方法能够连贯被执行下去。
2.总体原理就是记录每个方法用户传入的参数,最终将sql进行替换拼接处理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。