業(yè)務(wù)場景為一個(gè)主庫,多個(gè)業(yè)務(wù)庫,類似多租戶場景,主庫數(shù)據(jù)共享,之前使用tp框架時(shí),使用的方案是針對每個(gè)請求生命周期,根據(jù)參數(shù)在中間件中動(dòng)態(tài)設(shè)置默認(rèn)數(shù)據(jù)庫連接。主庫模型指定連接,業(yè)務(wù)庫模型不指定連接,會(huì)使用默認(rèn)連接。請問在webman中該如何設(shè)計(jì),避免模型需要指定數(shù)據(jù)庫連接及無法使用模型中的事件?
已搜索,無可用方案。
1、可以新建一個(gè)基類模型,在頂級基類模型里面使用connection屬性進(jìn)行鏈接
2、可以直接Db::connection("plugin.配置文件")鏈接
class User extends Model
{
protected $connection;
public function construct($connection)
{
$this->$connection = $connection;
parent::construct();
}
}
用的時(shí)候指定連接
$model = new User('website');
更進(jìn)一步,你可以在中間件里給$request設(shè)置一個(gè)臨時(shí)屬性存儲(chǔ)當(dāng)前connection連接名,例如
$request->connectionName = 'website';
實(shí)例化的時(shí)候
$model = new User($request->connectionName);
再進(jìn)一步,modle可以這樣寫
class User extends Model
{
protected $connection;
public function construct()
{
$this->$connection = request()->connectionName;
parent::construct();
}
}