Database 如何在laravel中实现数据库从mysql到mongodb的自动转换
当我将数据库连接从Mysql更改为Mongodb时,我想自动化数据库依赖关系 我正在使用laravel mongodb数据库,为了使用这个库,我应该从它的specefic模型扩展我的模型, 我希望在运行时将我的数据库连接从mysql更改为mongodb,并且在更改数据库依赖项时(例如扩展其模型)将自动完成 这是laravel模型的实现: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
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(),因为模型没有从库模型继承,所以导致了此错误@贾勒莫哈梅斯