我正在使用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中做我想做的事情,如果可以,怎么做?
答案 0 :(得分:2)
我们无法一次调用DataObject::get()
来检索所有DataObjects
。 DataObject
本身没有数据库表,因此无法查询。
我们无法在一个查询中获取所有自定义数据对象。
我们可以通过调用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()
。其中包括DataObjects
,Member
,File
等。这些总是需要通过自己的SiteConfig
请求进行检索。