dida / db
Dida Database
This package's canonical repository appears to be gone and the package has been frozen as a result.
v0.1.5
2021-07-09 08:11 UTC
Requires
- php: ^5.5 || ^7.0
README
Dida Database 是从 Dida Framework 框架拆分出来的独立组件,便于在小型项目中独立使用。
项目网址: https://gitee.com/zeupin/dida-db
配置文件
配置项 | 名称 | 默认 | 示例 |
---|---|---|---|
dbtype | 数据库类型 | "mysql" | "mysql" |
dsn | dsn | "mysql:host=localhost;port=3306;dbname=foo" | |
dbhost | 数据库地址 | "localhost" | "localhost" |
dbport | 端口 | 3306 | "3306" |
dbname | 默认数据库名 | 无 | "crm" |
dbusername | 数据连接的用户名 | "" | "root" |
dbpassword | 数据连接的密码 | "" | "Pass1234" |
driver_options | 驱动选项 | [] | 参见 PHP 的 PDO 文档 |
prefix | 缺省的表名前缀 | "" | "tb_" |
dbversion | 数据库的版本 | 无 | "5.0" |
说明:
- 如果设置了 dsn,则忽略 dbhost、dbport、dbname 。
Mysql 配置文件示例
有 DSN 的配置:
return [
'dsn' => 'mysql:host=localhost;port=3306;dbname=foo', // 必填
'dbusername' => 'YOUR_DB_USERNAME',
'dbpassword' => 'YOUR_DB_PASSWORD',
'driver_options' => [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_PERSISTENT => true
],
];
没有 dsn 的配置:
return [
'dbtype' => 'mysql',
'dbhost' => 'localhost',
'dbport' => 3306,
'dbusername' => 'YOUR_DB_USERNAME',
'dbpassword' => 'YOUR_DB_PASSWORD',
'driver_options' => [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_PERSISTENT => true
],
];
常用
1. 在 Model 中创建 db 的引用
class Model
{
// db的本地实例
protected $db;
public function __construct()
{
...
// 初始化db
$this->db = ServiceBus::get("Db");
}
}
2. $this->db->table()
// 通过设置主表,创建一个查询 \Dida\Db\Query
$q = $this->db->table("表名", "别名");
3. 查询的一些方法,可以链式操作
- 用法 1
where(字段名, 操作, 值)
。操作默认为=,值默认为 null - 用法 2
where(字段数组, 操作)
。操作默认为=
// 用法1-1:简单查询
$this->db->table("表名","别名")->where("username", '=', 'tom')->where("password", '=', 'jerry')->select();
// 对应的WHERE子句为:
// [
// "sql" => "WHERE ((`username` = ?) AND (`password` = ?))",
// "params" => ["tom","jerry"],
// ]
// 用法2-1:多字段查询
$input = [
"username" => 'tom',
"password" => 'jerry',
];
$this->db->table("表名","别名")->where($input)->select();
// 对应的WHERE子句为:
// [
// "sql" => "WHERE ((`username` = ?) AND (`password` = ?))",
// "params" => ["tom","jerry"],
// ]
// 用法2-2:多字段查询,带op
$input = [
"username" => 'tom',
"password" => 'jerry',
];
$this->db->table("表名", "别名")->where($input, 'LIKE')->select();
// 对应的WHERE子句为:
// [
// "sql" => "WHERE ((`username` LIKE ?) AND (`password` LIKE ?))",
// "params" => ["tom","jerry"],
// ]
4. 修改 WHERE 条件的拼接逻辑
- 默认的 WHERE 条件拼接逻辑为
AND
,可以通过whereLogic($logic)
修改拼接逻辑。 whereLogic()只对其后的 where 设置有效,对之前的无效。
table()->where(条件1)->where(条件2); // 结果: (条件1 AND 条件2) table()->where(条件1)->where(条件2)->whereOr()->where(条件3)->where(条件4); // 结果: ((条件1 AND 条件2) OR 条件3 OR 条件4) table()->where(条件1)->where(条件2)->whereOr()->where(条件3)->where(条件4)->whereAnd()->where(条件5); // 结果: (((条件1 AND 条件2) OR 条件3 OR 条件4) AND 条件5)