基于数据库连接的PHP OO动态类方法实现


PHP OO Dynamic Class Methods Implementations Based on Database Connection

我正在构建一个系统,从不同的数据库(客户端的数据库)中提取数据,过滤数据并在本地存储。存储的数据对每个人(客户端、商店、事务)都是相同的,但来自不同数据库的数据不会相同。我需要根据他们的数据库过滤这些数据,例如:

我有以下模型(我使用的是LaravelPHP):Client-有了这个模型,我可以调用Client::filterData($data),它将适用于特定的客户端。我想使用相同的模型和方法来过滤我的数据,但基于客户端的数据库使用不同的接口。

这就像电子商务处理他们的Shipment类/方法一样。它们有一个从不同类型的装运扩展而来的父类。

如果不够清楚,我可以更好地解释。我希望你们能帮我解决这个问题。谢谢

回答您的问题:

Client-使用此模型,我可以调用Client::filterData($data)将适用于特定客户。我想用同样的模型和方法过滤我的数据,但使用基于客户端的数据库。

您真正想要的是如何在运行时替换数据库连接。不幸的是,Laravel并不很好地支持依赖注入,因此您必须解决这个问题才能使其工作:

abstract class AbstractClient extends Eloquent
{
   // move everything from Client class into this one
}

然后简单地扩展它,并定义您想在init()方法中使用的连接

class Client extends AbstractClient 
{
       public funciton init()
       {
           DB::reconnect('client_database');
       }
}

对于另一个客户:

class AnotherClient extends AbstractClient 
{
       public funciton init()
       {
           DB::reconnect('another_client_database');
       }
}

通过这种方式,您可以为不同的连接设置相同的模型。当然它需要改进,我把它留给你了。