2016-11-08 71 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和用户标识即可。