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

时间:2014-11-06 12:38:48

标签: php class laravel laravel-4 interface

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

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

这就像电子商务与他们的货运类/方法一样。他们有一个从不同类型的货物延伸的父类。

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

1 个答案:

答案 0 :(得分:0)

回答你的问题:

  

客户端 - 使用此模型,我可以调用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');
       }
}

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