Gridfield 包含来自 Silverstripe 中外部数据库的数据
Gridfield containing data from external database in Silverstripe
我正在使用 ModelAdmin 通过 gridfield 显示数据。我想以相同的方式管理一个模型,但来自外部数据库。
在我的模型管理员中,我有调用我要管理的模型(数据对象)的代码:
private static $managed_models = array(
'exampleModel'
);
为了将数据插入第二个数据库,我在函数中包含以下代码:
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2); //connect to second database
//do somee stuff
DB::connect($databaseConfig); //return to default database
为了测试,我使用了 dataObject exampleModel 并定义了一些字段。
通过这种方式,gridfield 在我的 modelAdmin 中显示了这个模型的结果,所以它正在工作,但是我如何在这个 gridfield 中显示我的第二个数据库的结果。可能吗?
这是一个有趣的场景,在 SilverStripe 的默认设置中不可能开箱即用。请注意,在任何时候,只有一个数据库连接打开,就像大多数 CMS 系统一样,并且 ORM 在您的模型中使用的就是这个连接。
但是,原则上我不明白为什么这不能在 SilverStripe 中完成,但是需要先编写一些额外的 classes "behind" 你的模型为你满意地工作。任何解决方案也将基于您想要在每个相应数据库上编辑、删除模型(所有标准 GridField 操作)。
想到的唯一解决方案是使用 SilverStripe 的内置 Aspects 系统 - 但我不得不承认我自己从未使用过它。面向方面的编程不同于标准业务逻辑-class OO 编程,但仍然可以在 OO 范例中使用。它允许开发人员 "point cut"(将 "horizontally" 切入 class 逻辑并在预定义场景下的不同 class 中使用不同的逻辑)。
把它想象成一个钩子。
查看 SilverStripe 的方面系统及其使用的示例(参见:https://docs.silverstripe.org/en/3.2/developer_guides/extending/aspects/),我相信可以修改示例以供您使用。该示例解释了基于数据库读取或写入,ORM 应该如何使用一个数据库连接而不是另一个数据库连接,这听起来与您的场景相似,期望 "read" 和 "write" 成为哪个连接的仲裁者被使用,它将是哪个模型——也许是通过实现特定的接口。
祝你好运:-)
我正在使用 ModelAdmin 通过 gridfield 显示数据。我想以相同的方式管理一个模型,但来自外部数据库。
在我的模型管理员中,我有调用我要管理的模型(数据对象)的代码:
private static $managed_models = array(
'exampleModel'
);
为了将数据插入第二个数据库,我在函数中包含以下代码:
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2); //connect to second database
//do somee stuff
DB::connect($databaseConfig); //return to default database
为了测试,我使用了 dataObject exampleModel 并定义了一些字段。
通过这种方式,gridfield 在我的 modelAdmin 中显示了这个模型的结果,所以它正在工作,但是我如何在这个 gridfield 中显示我的第二个数据库的结果。可能吗?
这是一个有趣的场景,在 SilverStripe 的默认设置中不可能开箱即用。请注意,在任何时候,只有一个数据库连接打开,就像大多数 CMS 系统一样,并且 ORM 在您的模型中使用的就是这个连接。
但是,原则上我不明白为什么这不能在 SilverStripe 中完成,但是需要先编写一些额外的 classes "behind" 你的模型为你满意地工作。任何解决方案也将基于您想要在每个相应数据库上编辑、删除模型(所有标准 GridField 操作)。
想到的唯一解决方案是使用 SilverStripe 的内置 Aspects 系统 - 但我不得不承认我自己从未使用过它。面向方面的编程不同于标准业务逻辑-class OO 编程,但仍然可以在 OO 范例中使用。它允许开发人员 "point cut"(将 "horizontally" 切入 class 逻辑并在预定义场景下的不同 class 中使用不同的逻辑)。
把它想象成一个钩子。
查看 SilverStripe 的方面系统及其使用的示例(参见:https://docs.silverstripe.org/en/3.2/developer_guides/extending/aspects/),我相信可以修改示例以供您使用。该示例解释了基于数据库读取或写入,ORM 应该如何使用一个数据库连接而不是另一个数据库连接,这听起来与您的场景相似,期望 "read" 和 "write" 成为哪个连接的仲裁者被使用,它将是哪个模型——也许是通过实现特定的接口。
祝你好运:-)