我正在开发一个应用程序,多个公司可以创建他们的帐户,并使用它作为自己的。而且每个公司都可以为自己的公司创建多个用户。每个公司都可以访问自己的数据,而不能访问其他公司的数据。因此,我在每个表中都有一个company_id列,许多表中也有user_id列。为了插入company_id和user_id,我必须在每个存储方法中手动提供它们,如下所示:
$request['company_id'] = Auth::user()->company_id;
$request['user_id'] = Auth::user()->id;
Land::create($request->all());我也必须在model中提到这两个列。
$fillable = ['company_id','user_id','other_column','more_column'];我想在数据库中自动插入当前公司id和当前用户id的值,只要有任何数据插入到表中。
有没有办法做到这一点?
发布于 2016-11-08 15:23:41
一种常见的方法是开发一组类,对当前连接到应用程序的公司和用户进行建模。然后,您可以将当前的公司id和用户id封装在类代码中,也可以将数据库操作封装在同一个类中。这样,这些id将始终作为类变量可用。
另一个创造性的解决方案是在您打开到数据库的连接时设置MySQL user-defined session variables。您可以在这些表上开发触发器,以填充公司id和用户id。
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,可能会更好。
https://stackoverflow.com/questions/40480967
复制相似问题