2017-06-04 107 views
0

對於Laravel來說相當新穎,所以如果我缺乏任何基本知識,請事先接受我的道歉。LARAVEL - 每個用戶擁有多個數據庫,用戶每次都選擇數據庫連接

所以,我正在構建一個應用程序,其中每個用戶都可以登錄到個人儀表板。該儀表板顯示來自特定數據庫的數據。每個用戶有多個數據庫,但每個數據庫只屬於一個用戶。用戶可以從儀表板創建新的數據庫(這由後端處理,只提及它可以讓您更好地瞭解應用程序的工作原理)。最後,還有一個單獨的數據庫,通用於存儲用戶 - 數據庫關係的所有用戶。

我需要爲每個用戶的是:

當他們登錄時,他們的儀表板顯示屬於該用戶的最新創建的數據庫的數據。 然後用戶可以從下拉菜單中選擇要「查看」的數據庫,並且儀表板內容也會相應更改。 現在,我已經爲每個用戶的單個數據庫(硬編碼)工作,但想要添加上面描述的動態元素。

我發現這裏類似的東西:

https://laracasts.com/discuss/channels/general-discussion/change-database-name-of-connection-on-the-fly?page=1

,但似乎有一些答案從線程缺少所以不能完全按照它。

每個數據庫都有完全相同的結構,因此只有一個控制器和模型需要動態獲取數據庫名稱的值。

因此,工作流,我需要什麼看起來如下:

  • View Composer的

    • 用戶登錄獲取該用戶的所有可用的數據庫列表,並生成一個下拉菜單
    • 模式連接到最新創建的數據庫
    • 控制器使用該連接檢索數據並將其傳遞到視圖
    • 用戶從下拉菜單中選擇不同的數據庫
    • 更新到新選定的數據庫
    • 型號連接
    • 控制器使用該連接從該數據庫中獲取的數據通過查看

    我的主要問題是定義將分配當前數據庫名稱爲變量的程序然後模型使用這個變量來建立一個動態連接,並最終調用控制器來檢索和顯示數據。

    是一個這樣的過程是可行的,什麼是最好的方法呢?

    預先感謝您的幫助!

  • 回答

    1

    我明白你想要在這裏做什麼,我花了幾分鐘思考和研究。

    看看:https://laracasts.com/discuss/channels/tips/set-up-dynamic-database-connection-globally

    這本質上說,你需要在你的Laravel database.php文件中的兩個MySQL連接配置的詳細信息。 main用於您的主數據庫和用於連接到用戶特定數據庫的輔助連接(以下示例中稱爲tenant),該連接爲空。

    某處高高的應用程序,您需要設置特定的數據庫配置,例如,(服務提供商):

    Config::set('database.connections.tenant.host', $tenant->host); 
    Config::set('database.connections.tenant.username', $tenant->username); 
    Config::set('database.connections.tenant.password', $tenant->password); 
    Config::set('database.connections.tenant.database', $tenant->database); 
    

    可以隨後設置在模型中的保護$connection屬性來使用這個輔助數據庫連接。

    class MyModel extends Model { 
        protected $connection = 'tenant'; 
    } 
    
    +0

    非常感謝您的回覆,並對延誤表示歉意,這一天非常忙碌。這看起來非常適合我真正的需求,只需要找出一種方法將數據從視圖與模型連接起來,這樣我就可以從下拉菜單選擇中傳遞數據庫名稱。我會做我的測試,並讓你知道它是如何工作的! – tsps

    相關問題