php - SilverStripe 一次性查询所有 DataObject 表
问题描述
我正在使用 SilverStripe CMS 开发一个网站。我在查询 DataObjects 时遇到了一点问题。我正在尝试一次性获取所有 DataObjects 以优化性能:
DataObject::get();
当调用它时,我收到以下错误:
[Emergency] Uncaught InvalidArgumentException: Call ::get() instead of DataObject::get()
如果我可以查询它,我想做这样的进一步操作:
DataObject::get()->filterAny([ 'ClassName' => 'ClassName' ]);
我还尝试使用以下查询:
$sqlQuery = new SQLQuery();
$sqlQuery->setFrom('Player');
但问题是我不知道全局/父表名称 DataObject 的名称是什么。
是否可以在 SilverStripe 中做我想做的事情,如果可以,怎么做?
解决方案
我们不能一次调用DataObject::get()
全部检索DataObjects
。DataObject
本身没有数据库表,因此无法查询。
我们无法在一次查询中获取所有自定义数据对象。
我们可以通过调用在一个查询中获取所有页面Sitetree::get()
。
如果我们希望能够DataObjects
在一个查询中获取所有我们自己的自定义,我们需要首先创建一个BaseObject
并拥有我们所有的自定义DataObjects
扩展BaseObject
。
基础对象
use SilverStripe\ORM\DataObject;
class BaseObject extends DataObject
{
}
其他自定义类
class ExampleObject extends BaseObject
{
}
class AnotherExampleObject extends BaseObject
{
}
然后我们可以调用BaseObject::get()
来获取我们所有的自定义对象并调用SiteTree::get()
来获取我们所有的页面。
请注意,这仍然不会DataObjects
在任何已安装的模块中得到任何定义,包括 SilverStripe 核心。这包括Member
,File
等SiteConfig
。这些总是需要用他们自己的get()
请求来检索。
推荐阅读
- javascript - 如何在 django 中使用 ajax 将 value 中的数量添加到购物车会话中?
- javascript - 绝对位置标题不粘
- c - 循环的可重用函数
- html - 在移动视图上引导右块超过左块
- javascript - 即使设置了 cookie,req.cookies 也会返回 [Object: null prototype] {}
- c# - 任何人都在 .net 5.0 中为 SCardListReaders 使用 smartcardmagic.net 库
- python - 为什么我不能在 Python 中使用 gif 作为 Turtle 的背景?
- c# - .NET Core 3.1 可执行文件无法在某些机器上启动
- c# - Unity/C#:将整个脚本重置为“原始”状态
- c# - 如何解决dotnet核心中的程序集依赖?