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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章