任何一个PHP框架在操作数据库时都可以使用连贯操作。

TP3.2框架中:
QQ截图20200314192322.png

再比如Laravel5中:
QQ截图20200314192731.png

本篇文章用一个简单的例子,说明框架中如何去实现连贯查询操作。当然,因为是较简单的例子,跟框架中实现方式大不相同,在此希望能起到抛砖引玉的作用。

代码示例

<?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进行替换拼接处理。


如若时光萧瑟去丶
111 声望9 粉丝

weakChickenPeng.