swoft 学习笔记之数据库配置与实体定

  • 基础配置

    数据库的配置放置在 app\bean.php文件中,去掉了繁琐的.env文件配置,你可以认为配置的 db 是一个 bean 对象

    return [
    'db' => [
    'class' => DataBase::class,
    'dsn'   => 'mysql:dbname=xlxd;host=192.168.10.10;port=3306',
    'username' => 'root',
    'password' => '',
    'charset'  => 'uth8mb4' 
    ],
    ];
    /**
    class 指定当前 bean容器使用哪个一个类 当然你也可以指定自己实现的database类
    dsn PDO需要使用的连接配置信息
    username 数据登录用户名
    password 数据库登录密码
    charset 数据库字符集
    */
  • 属性配置

    • prefix 表名的公共前缀或后缀
    • options PDO属性选项
    • config MySQL的其他配置, 默认驱动仅实现了 MySQL

      collation 设置指定数据集如何排序
      timezone 设置时区设置
      modes 设置连接模式(可以是一维数组,也可以是英文逗号分割的 modes)
      strict 设置获取查询以启用严格模式(实际上也是设置modes配置)
      fetchMode 设置 pdo 返回的类型 默认的连接池返回的类型为 FETCH_ASSOC 也就是数组方式

  /**
   * 默认的PDO连接选项。当然你可以选择替换它 
   *
   * @var array
   */
  $options = [
      \PDO::ATTR_CASE              => \PDO::CASE_NATURAL,
      \PDO::ATTR_ERRMODE           => \PDO::ERRMODE_EXCEPTION,
      \PDO::ATTR_ORACLE_NULLS      => \PDO::NULL_NATURAL,
      \PDO::ATTR_STRINGIFY_FETCHES => false,
      \PDO::ATTR_EMULATE_PREPARES  => false,
      \PDO::ATTR_ERRMODE           => \PDO::ERRMODE_EXCEPTION,
  ];

默认的db.pool连接池的DB类查询查询操作,返回的是数组。自定义的db连接池如果也需要返回数组,需要设置fetchMode参数 为 PDO::FETCH_ASSOC,否则返回是的 stdClass 对象

'db'  => [
    'class'    => Database::class,
    'dsn'      => 'mysql:dbname=swoft;host=127.0.0.1',
    'username' => 'root',
    'password' => '123456',
    'charset'  => 'utf8mb4',
    'prefix'   => 't_',
    'options'  => [
        \PDO::ATTR_CASE => \PDO::CASE_NATURAL,
    ],
    'config'   => [
        'collation' => 'utf8mb4_general_ci',
        'strict'    => false,
        'timezone'  => '+8:00',
        'modes'     => 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES',
        'fetchMode' => PDO::FETCH_ASSOC,
    ],
],
  • 读写&连接

    writes 主库配置 执行Create Update Delete 操作的时候会从连接池 随机选择主库节点执行
    reads 从库配置 Read 操作使用默认会从连接池 随机选择一个从库节点执行

    return [
    'writes' => [
    [
    'dsn'      => 'mysql:dbname=swoft;host=127.0.0.1',
    'username' => 'root',
    'password' => '123456',
    ],
    ],
    'reads'  => [
    [
    'dsn'      => 'mysql:dbname=swoft;host=127.0.0.1',
    'username' => 'root',
    'password' => '123456',
    ],
    ],
    ]
  • 连接池

    db 的连接是通过 连接池创建和释放的,通过ConnectionManager类来管理连接,创建的为短链接 操作执行失败会重试一次

return [
    'db.pool2' => [
        'class'       => \Swoft\Db\Pool::class,
        'database'    => \bean('db2'),
        'minActive'   => 10,
        'maxActive'   => 20,
        'maxWait'     => 0,
        'maxWaitTime' => 0,
        'maxIdleTime' => 60,
     ],
]
/**
class 是默认的 Pool 对象 你可以更具官方的自己继承实现,然后换成自己 的 Pool 类名就可以了
database 驱动的数据库对象 是读 & 写连接配置的
minActive 连接池需要维持的连接数
maxActive 连接池最大保持的连接数
maxWait 连接池最多等待连接数, 如果没有限制为0(默认)
maxWaitTime 连接最大等待时间,单位秒,如果没有限制为0(默认)
maxIdleTime 连接最大空闲时间,单位秒
*/
定义实体

一个实体类对应一张数据库的表结构,一个实体对象代表了表的一行数据记录

  • 注解标签

    • @Entity 标记一个类是一个实体,有两个参数 table 指定数据库表名,pool 该实体选择的连接池,默认为db.pool
    • @Column 定义一个列,name指定表字段,prop指定字段别名,hidden是否隐藏,如果为真那么它 toArray() 的时候将会被隐藏
    • @Id 标明当前类属性对应了数据库表中的主键,incrementing 是否为递增主键,默认为 true 递增主键

      prop 只是为字段设置一个别名,只有在调用toArray的时候才会被转换。这样能隐藏数据库真实的字段。使用where等子句,需要使用数据库字段
      所有字段属性,必须要有getter和setter方法,你可以使用phpstorm 快捷键 ctrl+n,它会更具属性 快速生成 getter和setter
      若表字段有下划线,类属性均定义为 小驼峰 写法 例: 字段 user_name 则属性写为 $userName
      2.x 去掉了 type 属性 现在会使用 属性上定义的 @var 注解定义的第一个类型,决定了返回值类型,底层会强转类型

  • 定义实体命令

    • 生成全部实体表:php bin/swoft entity:create -y
    • 生成单个实体表:php bin/swoft entity:create tableName1,tableName2
    • 生成单个实体表&指定路径:php bin/swoft entity:create tableName1,tableName2 --path=@app/Model/Entity
本作品采用《CC 协议》,转载必须注明作者和本文链接
今年不学习,明天惨唧唧。
zs4336
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!