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 协议》,转载必须注明作者和本文链接
 
           maturest 的个人博客
 maturest 的个人博客
         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号