Php 包含来自Silverstripe中外部数据库的数据的Gridfield
我使用ModelAdmin通过gridfield显示数据。我想以同样的方式管理模型,但要从外部数据库进行管理 在我的模型管理员中,我有调用我要管理的模型(DataObject)的代码:Php 包含来自Silverstripe中外部数据库的数据的Gridfield,php,backend,silverstripe,Php,Backend,Silverstripe,我使用ModelAdmin通过gridfield显示数据。我想以同样的方式管理模型,但要从外部数据库进行管理 在我的模型管理员中,我有调用我要管理的模型(DataObject)的代码: private static $managed_models = array( 'exampleModel' ); 要将数据插入第二个数据库,我在函数中有以下代码: global $databaseConfig, $databaseConfig2; DB::connect($databaseConf
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设置中是不可能开箱即用的。请注意,在任何时候,只有一个DB连接是打开的,就像大多数CMS系统一样,ORM在您的模型中使用的就是这个连接 然而,原则上我不明白为什么不能在SilverStripe中实现这一点,但是在它能够令人满意地为您工作之前,需要“在”您的模型后面编写一些额外的类。任何解决方案都将取决于您是否希望在模型中编辑、删除(所有标准GridField操作)每个数据库 想到的唯一解决方案是使用SilverStripe的内置Aspects系统——但我必须承认自己从未使用过它。面向方面编程不同于类OO编程的标准业务逻辑,但仍然可以在OO范式中使用。它允许开发人员“切入点”(在预定义的场景下,在不同的类中“水平”切入类逻辑并使用不同的逻辑) 把它想象成一个小钩子 查看SilverStripe的方面系统及其使用的示例(请参见:),我相信可以根据您的使用修改该示例。该示例解释了基于DB读取或写入,ORM应该如何使用一个DB连接而不是另一个,这听起来与您的场景类似,希望不是“读取”和“写入”是使用哪个连接的仲裁器,而是哪个模型-可能是通过实现特定接口实现的
祝你好运:-)在CMS中,单独的读/写连接肯定会比较常见吗?也许只有那些为高负载而构建的。很好地参考了这些方面——读得不错。@RobbieAverill人们会这么认为的。SilverStripe最棒的一点是,至少有一种方法可以剥猫的皮——它是开发人员的CMS:我从OP中推断出,他们在问一个本机解决方案,答案是否定的——开箱即用。然而,如果OP想要修改类以使用原始SQL(通过
SQLSelect
),那么这也可能会起作用:但是要让所有东西“正常工作”,包括标准ORM调用,比如DataObject::get()
,以及>1db,那么类似方面的东西也可以工作。