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 协议》,转载必须注明作者和本文链接