1
我正在創建一個多租戶應用程序併爲每個用戶和他/她的次用戶分配一個數據庫。
我首先爲該用戶獲取數據庫名稱/密碼/用戶名,然後我需要將其作爲所有數據庫操作的默認值。
如何在Laravel 4中完成此操作?爲模型設置數據庫連接?
我正在創建一個多租戶應用程序併爲每個用戶和他/她的次用戶分配一個數據庫。
我首先爲該用戶獲取數據庫名稱/密碼/用戶名,然後我需要將其作爲所有數據庫操作的默認值。
如何在Laravel 4中完成此操作?爲模型設置數據庫連接?
您可以使用的連接方法:
User::connection('master')->where('name', $name)->get();
,您還可以使用存儲庫模式,以幫助您這也太:
class PostRepository {
private $connection = 'default-connection';
public function setConnetion($connection)
{
$this->connection = $connection;
}
public function all()
{
return Post::on($this->connection)->all();
}
public function query()
{
return Post::on($this->connection);
}
}
它可以讓你:
$post = new PostRepository;
$post->setConnection('new-connection');
return $post->query()->where('name', $name)->get();
或
return $post->all();
您還可以創建一個BaseModel,做它裏面:
class BaseModel extends Eloquent {
private $connection = 'default-connection';
public function __construct()
{
if (Auth::check())
{
$this->setConnection(Auth::user()->database_connection);
}
}
}
class Post extends BaseModel {
}
是不是有一個更簡單的方法?而不是在每個模型上都這樣做?我可以在模型構造函數中加入一些東西嗎? –
另外,我相信它是User :: on('connection-name') - > find(1)或者我錯了? –
你只受限於你的想象力。而且,是的,你是對的淘氣編碼器。只需編輯即可提供在所有模型中執行此操作的方法。 –