SilverStripe一次性查询所有DataObject表

时间:2019-08-21 10:27:48

标签: php silverstripe silverstripe-4

我正在使用SilverStripe CMS开发一个网站。我在查询DataObjects时遇到了一些问题。我正在尝试一次性获取所有DataObject,以优化性能:

DataObject::get();

调用此命令时,出现以下错误:

[Emergency] Uncaught InvalidArgumentException: Call ::get() instead of DataObject::get()

如果我可以查询它,我想做进一步的操作:

DataObject::get()->filterAny([ 'ClassName' => 'ClassName' ]);

我也尝试使用以下查询:

$sqlQuery = new SQLQuery();
$sqlQuery->setFrom('Player');

但是问题是我不知道全局/父表名称DataObject的名称是什么。

是否可以在SilverStripe中做我想做的事情,如果可以,怎么做?

1 个答案:

答案 0 :(得分:2)

我们无法一次调用DataObject::get()来检索所有DataObjectsDataObject本身没有数据库表,因此无法查询。

我们无法在一个查询中获取所有自定义数据对象。

我们可以通过调用Sitetree::get()在一个查询中获取所有页面

如果我们希望能够在一个查询中获取所有自己的自定义DataObjects,则需要先创建一个BaseObject,然后将所有自定义DataObjects扩展{{1 }}。

BaseObject

BaseObject

其他自定义类

use SilverStripe\ORM\DataObject;

class BaseObject extends DataObject
{
}

然后,我们可以调用class ExampleObject extends BaseObject { } class AnotherExampleObject extends BaseObject { } 来获取所有自定义对象,并调用BaseObject::get()来获取所有页面。

请注意,这仍然不会在任何已安装的模块(包括SilverStripe核心)中定义任何SiteTree::get()。其中包括DataObjectsMemberFile等。这些总是需要通过自己的SiteConfig请求进行检索。