欧美麻豆久久久久久中文_成年免费观看_男人天堂亚洲成人_中国一级片_动漫黄网站免费永久在线观看_国产精品自产av一区二区三区

中培偉業IT資訊頻道
您現在的位置:首頁 > IT資訊 > 數據庫 > 數據庫多租戶最終指南

數據庫多租戶最終指南

2020-09-14 16:22:19 | 來源:中培企業IT培訓網

如今數據庫對于這個時代的我們來說,并不陌生了吧。最近,一個新的數據庫項目顯示,經過身份驗證的用戶屬于特定租戶,應僅允許其從自己的數據庫中提取數據。本文是實現數據庫多租戶這一目標的方法。本文將選擇了以提供簡單測試代碼為起點的策略,并使它逐層工作。它提供了具有測試,遷移和特定于租戶的小功能的完整解決方案。

  1.每個故事都始于測試:PostsTest

讓測試驅動我的代碼成為了我的激情。多租戶不應有所不同。首先,我們確定我們希望測試的外觀,然后使代碼發生。

這是一個非常簡單且公平的測試。為了使其工作,首要要求是TenantTestCase設置租戶。但是在深入探討之前,讓我們快速編寫我們的create助手。

  2.TenantTestCase

通過測試,我們可以預期TenantTestCase該類將負責創建一個新公司,一個新用戶并對該用戶進行身份驗證。還應設置特定于數據庫的連接。

通過使用RefreshDatabase,應該自動遷移主數據庫。調用actingAs將建立身份驗證。至于用戶工廠,由于用戶屬于公司,因此應遞歸解決該依賴關系。

  3.工廠

該UserFactory會負責為我們創建新用戶。Laravel的默認UserFactory幾乎足夠好,我們只需要向其中添加company_id字段即可。

一旦需要創建新用戶,Laravel將嘗試解析CompanyFactory。讓我們接下來寫。

這CompanyFactory是一家新公司通過我們的測試而生的時刻,因此我決定利用它來按期望的那樣自動設置承租人數據庫連接PostsTest。

最后一個工廠是PostFactory。出于組織目的,我決定將所有主要工廠遷入database/factories/main并為的租戶工廠騰出空間database/factories/tenant。PostFactory非常簡單。

  4. tenant_connect()和tenant_migrate()幫助器

顧名思義,tenant_connect()它將與租戶數據庫建立數據庫連接。由于這是測試階段,因此我們應確保租戶數據庫接收到它自己的遷移,例如posts表。

該文件可以放在下database/helpers.php。不要忘記將其添加到作曲家自動加載中。

“ autoload”:{

“ classmap”:[

“數據庫/種子”,

“數據庫/工廠”

],

“文件”:[

“ database / helpers.php”

],

“ psr .4”:{

“ App \”: “ app /”

}

}

這將我們帶入下一個主題:遷移。

  5.主要遷移

默認的database / migrations文件夾將保存主要連接的數據庫結構。我們需要創建“ 公司”遷移并調整“ 用戶”以適應某個company_id字段。

使用名稱手動創建公司遷移2014_10_12_000000_create_companies_table.php會將其放置在users遷移之前,這將防止任何外鍵沖突,因為要創建用戶表的公司表應該已經存在。

  6.租戶遷移

在第(3)項中,我們建立了一種tenant_migrate()方法,該方法將使用文件夾database/migrations_tenant作為承租人數據庫結構的源。讓我們create_posts_table在那里創建遷移。

至此,所有必要的遷移就結束了。接下來,我們需要處理應用程序數據庫設置和模型的連接。

  7.應用程序數據庫設置

對于數據庫連接,讓我們重用上一篇文章中應用的相同策略:a main和tenant數據庫。特別注意指向的新默認連接main。另一個有趣的地方是DB_DRIVER變量,它將允許我們在測試和實時應用程序之間在SQLite和MySQL之間進行切換。

因為我們在談論數據庫設置,所以讓我們花點時間設置phpunit.xml文件。該文件應包含這些變量

  <env name =“ DB_DRIVER” value =“ sqlite” /> 

  <env name =“ DB_CONNECTION” value =“ main” /> 

  <env name =“ DB_DATABASE” value =“:內存:” />

  8.模型

還需要在租戶模型和主要模型之間劃分模型。讓我們在名稱空間下創建MainModel和TenantModelApp/Models。

主連接上的表應該擴展MainModel,而“ Posts”表是特定于客戶的數據庫結構的一部分,并且應該擴展TenantModel。就個人而言,我分別使用命名空間AppModelsMain和AppModelsTenant。

  9.路線

由于本文的重點是談論租期,所以我們不要浪費時間談論路由。測試現在應該通過。

  10.總結

我們從創建帖子的測試開始,然后點擊一個端點以查看是否返回。但是在執行測試之前,將調用setUpon方法TenantTestCase。

租戶測試用例類將創建一個用戶,該用戶屬于公司。在創建該公司的過程中,將建立一個新的數據庫連接,并通過tenant_migrate()助手進行遷移。完成所有這些操作后,“承租人測試用例”類將擁有一個經過身份驗證的用戶。

一旦/posts端點被調用,已創建了一個用戶數據庫和已建立連接。通過使用Post具有默認連接的模型,該模型tenant將自動從連接的數據庫中獲取記錄。

所有這些使我們成功實施了測試。但是實際應用呢?

  11.租戶中間件

測試為綠色,但實際的應用程序無法正常工作。這樣做的原因是因為測試正在建立租戶連接,但應用程序卻沒有。我們可以通過實現租戶中間件來解決這個問題。

上述就是關于數據庫多租戶最終指南的全部內容,想了解更多關于數據庫的信息,請繼續關注中培偉業。

主站蜘蛛池模板: 麻豆文化传媒精品一区 | 久久经精品久久精品免费观看 | 色欲AV久久一区二区三区 | 亚洲国产精品一区第二页 | 在线观看视频91 | 一级做a爰片久久毛片唾 | 国产亚洲伦在线无码A片润滑油 | aⅴ在线视频男人的天堂 | 最近韩国日本免费观看mv免费版 | 成年女人毛片免费视频喷潮 | 日韩精品无码免费专区网站 | 久久午夜夜伦鲁鲁片免费无码影视 | 成人免费一区二区三区 | 少妇群交换bd高清国语版 | 国产三级一区二区三区视频 | 被调教的少妇雅芳1一19 | 女人三A级毛片视频 | 国产熟女高潮av6666 | 国产重口老太和小伙乱 | 女人18毛片水最多 | 江湖艳事之巨臀榨精 | 天堂MV在线MV免费MV香蕉 | 一本大道中文日本香蕉 | 97日日碰曰曰摸日日澡 | 夜色资源站www国产在线视频 | 国内揄拍国内精品人妻 | 欧美人与牲口杂交在线播放免费 | 嫩草在线视频WWW免费看 | youjizz国产在线观看 | 成人黄网站A片免费观看 | h纯肉无遮掩3d动漫在线观看 | 国产在线看片免费人成视频97 | 人人妻人人做人人爽夜欢视频 | 国产精品无码制服丝袜 | 国自产偷精品不卡在线 | 亚洲综合精品第一页 | 日本xx13一18处交高清 | 少妇欲求不满和邻居在线播放 | 久草在线2 | 大尺度露器官的三级 | 动漫AV网站免费观看 |