2016-11-08 37 views
1

我正在開發一個應用程序,其中多個公司可以創建其帳戶並將其用作自己的帳戶。每家公司可以爲自己的公司創建多個用戶。每個公司都可以訪問他們自己的數據而不是其他數據所以,我在每個表中都有一個company_id列,很多表也有user_id列。爲了插入company_iduser_id我必須手動提供他們在每家商店的方法是這樣的:在許多表中自動插入相同的數據

$request['company_id'] = Auth::user()->company_id; 
$request['user_id'] = Auth::user()->id; 
Land::create($request->all()); 

我不得不提一下模型兩列了。

$fillable = ['company_id','user_id','other_column','more_column']; 

我想自動插入當前公司ID和當前用戶ID在數據庫中的值,只要有任何數據插入表中。

有沒有辦法做到這一點?

回答

0

一個常見的方法是開發一組類,它們模擬當前連接到您的應用程序的公司和用戶。然後,您可以將當前公司ID和用戶ID封裝在類代碼中,並將數據庫操作封裝在同一類中。這樣,這些ID將始終可用作類變量。

另一個創造性的解決方案是在打開到數據庫的連接時設置MySQL user-defined session variables。您可以在表上開發觸發器來填充公司標識和用戶標識。

CREATE TRIGGER defaults_on_insert BEFORE INSERT ON SomeTable 
FOR EACH ROW SET NEW.company_id = @company_id, NEW.user_id = @user_id; 

雖然這似乎相當有點冒險。如果數據庫連接斷開並且必須重新連接,則代碼必須重新建立會話變量。它也與代表數據庫對象的典型客戶端對象不兼容,因爲沒有清楚的方式來通知客戶端對象有關觸發器填充的值。

底線是你'可能會更好,只需確保在創建新行時提供公司ID和用戶標識即可。

相關問題