- 基礎配置
數據庫的配置放置在 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
- 生成全部實體表: