Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包含来自Silverstripe中外部数据库的数据的Gridfield_Php_Backend_Silverstripe - Fatal编程技术网

Php 包含来自Silverstripe中外部数据库的数据的Gridfield

Php 包含来自Silverstripe中外部数据库的数据的Gridfield,php,backend,silverstripe,Php,Backend,Silverstripe,我使用ModelAdmin通过gridfield显示数据。我想以同样的方式管理模型,但要从外部数据库进行管理 在我的模型管理员中,我有调用我要管理的模型(DataObject)的代码: private static $managed_models = array( 'exampleModel' ); 要将数据插入第二个数据库,我在函数中有以下代码: global $databaseConfig, $databaseConfig2; DB::connect($databaseConf

我使用ModelAdmin通过gridfield显示数据。我想以同样的方式管理模型,但要从外部数据库进行管理

在我的模型管理员中,我有调用我要管理的模型(DataObject)的代码:

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,那么类似方面的东西也可以工作。