链式操作


MiniFramwork 从 1.2.0 版本开始,支持在 Model 模型类中,通过链式操作方式对数据库进行操作。

下面将链式式操作各方法的进行示例说明:

table

用途说明:用于指定要操作的表名。

示例代码:

$r = $this->table('user')->select();
dump($r);

where

用途说明:用于指定查询条件,支持灵活的参数模式。

示例代码:

// 参数模式1:字符串(复杂的条件建议直接使用字符串)
$this->table('user')->where('id=1')->select();

// 参数模式2:多参数混合

// id=1 OR id=2
$this->table('user')->where('id', [1, 2])->select();

// id IN (1, 2, 3)
$this->table('user')->where('id', 'IN', [1, 2, 3])->select();

// id=1 OR id=2 OR id=3
$this->table('user')->where('id', '=', [1, 2, 3])->select();

// id<>1 AND id<>2 AND id<>3
$this->table('user')->where('id', '<>', [1, 2, 3], 'AND')->select();

select

用途说明:用于查询数据,支持传入参数 all 或 row,用来定义返回方式,默认值为 all。

示例代码:

// 返回多行结果集数组(无参数时默认为 all)
$list = $this->table('user')->select();

// 返回单行记录的信息
$row = $this->table('user')->where('id=1')->select('row');

add

用途说明:用于添加数据。

示例代码:

$data = ['name' => '张三', 'class' => '六年级三班'];
$r = $this->table('user')->data($data)->add();
dump($r);

data

用途说明:用于传入需要添加或更新的数据,支持传入二维索引数组和键值对关联数组。

示例代码:

$data = [
    ['name' => '张三', 'class' => '六年级三班'],
    ['name' => '李四', 'class' => '六年级三班']
];
$r = $this->table('user')->data($data)->add();
dump($r);

debug

用途说明:用于调试输出 SQL 语句。

示例代码:

$this->table('user')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user
//
// ----------DEBUG SQL END----------

delete

用途说明:用于删除数据(如未通过 where 方法指定条件时,会删除表中全部记录,请谨慎操作)。

示例代码:

$r = $this->table('user')->where('id=1')->delete();
dump($r); //返回的结果为影响的行数

save

用途说明:用于更新数据。

示例代码:

// 更新 id=1 的记录的 name 字段的值为 赵六
$r = $this->table('user')->data(['name'=>'赵六'])->where('id=1')->save();
dump($r); //返回的结果为影响的行数

field

用途说明:用于指定查询返回的字段。

示例代码:

$this->table('user')->field(['id', 'name'=>'username', 'class'])->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT id, name AS username, class FROM user
//
// ----------DEBUG SQL END----------

from

用途说明:用于指定要操作的表名,与 table 方法功能一致,开发者按习惯选用即可。

示例代码:

$this->from('user')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user
//
// ----------DEBUG SQL END----------

group

用途说明:用于分组,对应原生 SQL 语句中的 GROUP BY 的功能。

示例代码:

$this->table('user')->field(['age', 'COUNT(*)'=>'num'])->group('age')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT age, COUNT(*) AS num FROM user GROUP BY age
//
// ----------DEBUG SQL END----------

having

用途说明:用于对分组结果进行过滤,在调用 group 方法时有效。

示例代码:

$this->table('user')->field(['age', 'COUNT(*)'=>'num'])->group('age')->having('num>18')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT age, COUNT(*) AS num FROM user GROUP BY age HAVING num>18
//
// ----------DEBUG SQL END----------

distinct

用途说明:用于开启去重功能。

示例代码:

$this->table('user')->distinct()->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT DISTINCT * FROM user
//
// ----------DEBUG SQL END----------

order

用途说明:用于定义排序。

示例代码:

// ORDER BY id
$this->table('user')->order('id')->select();

// ORDER BY id DESC
$this->table('user')->order('id DESC')->select();

// ORDER BY age, id
$this->table('user')->order(['age', 'id'])->select();

// ORDER BY age ASC, id DESC
$this->table('user')->order(['age ASC', 'id'=>'DESC'])->select();

// ORDER BY age DESC, id ASC
$this->table('user')->order(['age'=>'DESC', 'id'=>'ASC'])->select();

limit

用途说明:用于定义返回结果集的偏移量和行数。

示例代码:

// LIMIT 20
$this->table('user')->limit(20)->select();

// LIMIT 10, 20
$this->table('user')->limit(10, 20)->select();

page

用途说明:用于分页,比 limit 更方便。第一个参数是要返回的页数,第二个参数是定义每页的行数(默认值为10)。

示例代码:

// 返回第1页(LIMIT 0, 10)
$this->table('user')->page(1)->select();

// 返回第2页(LIMIT 10, 10)
$this->table('user')->page(2)->select();

// 返回第1页,每页20行(LIMIT 0, 20)
$this->table('user')->page(1, 20)->select();

innerjoin

用途说明:用于连表查询,对应原生 SQL 语句中的 INNER JOIN 的功能。

示例代码:

$this->from('user')->innerjoin('user_address', 'user.id=user_address.id')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user INNER JOIN user_address ON user.id=user_address.id
//
// ----------DEBUG SQL END----------

leftjoin

用途说明:用于连表查询,对应原生 SQL 语句中的 LEFT JOIN 的功能。

示例代码:

$this->from('user')->leftjoin('user_address', 'user.id=user_address.id')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user LEFT JOIN user_address ON user.id=user_address.id
//
// ----------DEBUG SQL END----------

rightjoin

用途说明:用于连表查询,对应原生 SQL 语句中的 RIGHT JOIN 的功能。

示例代码:

$this->from('user')->rightjoin('user_address', 'user.id=user_address.id')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user RIGHT JOIN user_address ON user.id=user_address.id
//
// ----------DEBUG SQL END----------

join

用途说明:用于连表查询,可通过传入第三个参数来指定连表方式,允许的参数为:INNER(默认),RIGHT 和 LEFT。

示例代码:

$this->from('user')->join('user_address', 'user.id=user_address.id', 'RIGHT')->debug()->select();

// 上述代码会输出如下信息:
// ----------DEBUG SQL BEGIN----------
//
// SELECT * FROM user RIGHT JOIN user_address ON user.id=user_address.id
//
// ----------DEBUG SQL END----------

提示1:MiniFramework 在 2.1.0 开始支持 add、save、delete 和 data 四个连贯操作的方法,并对原有的 order、limit、group 和 select 方法进行了改进和完善。

提示2:MiniFramework 2.5.0 中针对 where 方法新增了通过参数构造查询条件的特性。

提示3:MiniFramework 2.7.0 中,新增了更符合习惯的 from 方法,与原 table 方法的用法完全一致。