SilverStripe 一次性查询所有 DataObject table

SilverStripe querying all the DataObject table in one go

我正在使用 SilverStripe CMS 开发一个网站。我在查询数据对象时遇到了一点问题。我正在尝试按如下方式一次性获取所有数据对象以优化性能:

DataObject::get();

调用此方法时出现以下错误:

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

如果可以查询的话,我想再做这样的操作:

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

我也尝试过使用以下查询:

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

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

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

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

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

我们可以通过调用 Sitetree::get().

在一次查询中获取所有

如果我们希望能够在一个查询中获取所有我们自己的自定义 DataObjects,我们需要首先创建一个 BaseObject 并让我们所有的自定义 DataObjects 扩展 BaseObject.

BaseObject

use SilverStripe\ORM\DataObject;

class BaseObject extends DataObject
{
}

其他定制类

class ExampleObject extends BaseObject
{
}

class AnotherExampleObject extends BaseObject
{
}

然后我们可以调用 BaseObject::get() 来获取我们所有的自定义对象并调用 SiteTree::get() 来获取我们所有的页面。

请注意,这仍然不会在任何已安装的模块(包括 SilverStripe 核心)中定义任何 DataObjects。这包括 MemberFileSiteConfig 等。这些将始终需要通过自己的 get() 请求进行检索。