【发布时间】:2019-07-17 05:54:55
【问题描述】:
当我将数据库连接从 Mysql 更改为 Mongodb 时,我想自动化数据库依赖关系。
我将https://github.com/jenssegers/laravel-mongodb 用于 laravel mongodb 数据库,为了使用这个库,我应该从它的特定模型扩展我的模型, 我想在运行时将我的数据库连接从 mysql 更改为 mongodb,并且在更改数据库时,它的依赖项(例如扩展它的模型)会自动完成。
这是 laravel 模型的实现:
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'
);
}
我知道我只能在构造函数或方法中使用依赖注入,在这种情况下我没有构造函数,我不知道如何使用构造函数注入(因为它们都是抽象类和我的模型应该扩展库类而不只是调用它的特殊方法),那么它肯定不会工作。
任何机构都有解决方案吗?
【问题讨论】:
-
你能告诉我们错误吗?顺便说一句,您不使用装饰器模式,而是使用策略模式。
-
它说:vendor\laravel\framework\src\Illuminate\Database\Connection.php:在 null 上调用成员函数 prepare(),因为模型没有从库模型继承它导致这个错误。 @DjellalMohamedAniss
标签: database mongodb laravel dependency-injection