Database 如何在laravel中实现数据库从mysql到mongodb的自动转换

Database 如何在laravel中实现数据库从mysql到mongodb的自动转换,database,mongodb,laravel,dependency-injection,Database,Mongodb,Laravel,Dependency Injection,当我将数据库连接从Mysql更改为Mongodb时,我想自动化数据库依赖关系 我正在使用laravel mongodb数据库,为了使用这个库,我应该从它的specefic模型扩展我的模型, 我希望在运行时将我的数据库连接从mysql更改为mongodb,并且在更改数据库依赖项时(例如扩展其模型)将自动完成 这是laravel模型的实现: abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializa

当我将数据库连接从Mysql更改为Mongodb时,我想自动化数据库依赖关系

我正在使用laravel mongodb数据库,为了使用这个库,我应该从它的specefic模型扩展我的模型, 我希望在运行时将我的数据库连接从mysql更改为mongodb,并且在更改数据库依赖项时(例如扩展其模型)将自动完成

这是laravel模型的实现:

abstract class Model implements ArrayAccess, Arrayable, Jsonable, 
JsonSerializable, QueueableEntity, UrlRoutable {
  it's codes .... 
}
abstract class Model extends BaseModel {
   it's codes .... 
}
这是库模型实现:

abstract class Model implements ArrayAccess, Arrayable, Jsonable, 
JsonSerializable, QueueableEntity, UrlRoutable {
  it's codes .... 
}
abstract class Model extends BaseModel {
   it's codes .... 
}
我将这些代码添加到我的RouteServiceProvider.php中,用于替换库模型,而不是laravel模型:

if (config('database.default') == 'mongodb') {
       $this->app->bind(
            'Illuminate\Database\Eloquent\Model',
            'Jenssegers\Mongodb\Eloquent\Model'
        );
}
我知道我只能在构造函数或方法中使用依赖注入,在这种情况下,我没有构造函数,也不知道如何使用构造函数注入(因为它们都是抽象类,我的模型应该扩展库类,而不仅仅是调用它的特殊方法),那么它肯定不会工作


有人有解决方案吗?

我自己找到了答案,我分享了它的解决方案,因为其他人也会有同样的问题:

首先,您必须在config/app.php中定义Alise类(例如:DBModel):

'aliases'=> [
    ...
    'DBModel' => ''

]
然后,您必须继承所有要进行动态连接的模型:

在模型类中:

use DBModel ;
class Comment extends DBModel {
...
}
最后在您的serviceProvider at boot功能中添加以下代码:

if (config('database.default') == 'mysql') {
   $loader = AliasLoader::getInstance();
   $loader->alias('DBModel', \Illuminate\Database\Eloquent\Model::class);
} else if (config('database.default') == 'mongodb') {
  $loader = AliasLoader::getInstance();
  $loader->alias('DBModel', \Jenssegers\Mongodb\Eloquent\Model::class);
}

别忘了在文件顶部使用illumb\Foundation\AliasLoader

您能告诉我们错误吗?顺便说一句,您没有使用装饰器模式,而是使用策略模式。它说:vendor\laravel\framework\src\illumb\Database\Connection.php:调用null上的成员函数prepare(),因为模型没有从库模型继承,所以导致了此错误@贾勒莫哈梅斯