首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个表中自动插入相同的数据

问在多个表中自动插入相同的数据
EN

Stack Overflow用户
提问于 2016-11-08 15:11:27
回答 1查看 24关注 0票数 1

我正在开发一个应用程序,多个公司可以创建他们的帐户,并使用它作为自己的。而且每个公司都可以为自己的公司创建多个用户。每个公司都可以访问自己的数据,而不能访问其他公司的数据。因此,我在每个表中都有一个company_id列,许多表中也有user_id列。为了插入company_id和user_id,我必须在每个存储方法中手动提供它们,如下所示:

代码语言:javascript
复制
$request['company_id'] = Auth::user()->company_id;
$request['user_id'] = Auth::user()->id;
Land::create($request->all());

我也必须在model中提到这两个列。

代码语言:javascript
复制
$fillable = ['company_id','user_id','other_column','more_column'];

我想在数据库中自动插入当前公司id和当前用户id的值,只要有任何数据插入到表中。

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-11-08 15:23:41

一种常见的方法是开发一组类,对当前连接到应用程序的公司和用户进行建模。然后,您可以将当前的公司id和用户id封装在类代码中,也可以将数据库操作封装在同一个类中。这样,这些id将始终作为类变量可用。

另一个创造性的解决方案是在您打开到数据库的连接时设置MySQL user-defined session variables。您可以在这些表上开发触发器,以填充公司id和用户id。

代码语言:javascript
复制
CREATE TRIGGER defaults_on_insert BEFORE INSERT ON SomeTable
 FOR EACH ROW SET NEW.company_id = @company_id, NEW.user_id = @user_id;

不过,这似乎有相当的风险。如果数据库连接断开并必须重新连接,则代码必须重新建立会话变量。它与代表数据库对象的典型客户端对象也有些不兼容,因为没有一种明确的方式通知客户端对象触发器填充的值。

底线是,只要确保在创建新行时提供了公司id和用户id,可能会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40480967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档