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

This package is auto-updated.

Last update: 2021-11-09 08:53:36 UTC


README

Dida Database 是从 Dida Framework 框架拆分出来的独立组件,便于在小型项目中独立使用。

项目网址: https://gitee.com/zeupin/dida-db

配置文件

配置项名称默认示例
dbtype数据库类型"mysql""mysql"
dsndsn"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"

说明:

  1. 如果设置了 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)