gpt4 book ai didi

php - 未为类设置 Silverstripe table_name

转载 作者:可可西里 更新时间:2023-11-01 13:44:40 28 4
gpt4 key购买 nike

我刚刚开始学习 SilverStripe,实际上我对 silverstripe 网站上的类(class)有疑问。

我有这门课:

namespace SilverStripe\Lessons;

use Page;

class ArticlePage extends Page
{
private static $can_be_root = false;
private static $db = [
'Date' => 'Date',
'Teaser' => 'Text',
'Author' => 'Varchar(255)',
];

// public function getCMSFields(){
// $fields = parent::getCMSFields();
// $fields = addFieldToTab();
// return $fields;
// }

}

现在,当我访问/dev/build 时,我会在构建页面上收到以下反馈: enter image description here

所以我接下来所做的实际上是注释掉 $db 数组的声明。然后我从开发/构建中得到了这个反馈:

enter image description here

所以有些事情我不确定。 dev/build 的第一个输出中的红色注释指出您应该为所有命名空间模型定义一个 table_name。它确实没有说明我有一个未定义的表名。但是它下面的下一个注释说 table_name 没有为类 SilverStripe\Lessons\ArticlePage 设置。那么在这些消息的上下文中定义一个表名和“设置”一个表名是一回事吗?

此外,第二个输出表明为 SilverStripe\Lessons\ArticlePage 定义了一个 table_name每个 table_name 后面附加了“2”的事实是我在开始这篇文章之前进行的试验的结果,我相信。即,一旦我看到这种行为,我就重复实验以尝试重现这种行为,因此创建和删除了更多表,因此必须增加它们的名称。那么为什么没有设置 ArticlePage table_name 呢?有人可以帮我解决这个问题吗?戴夫。

最佳答案

该消息意味着您应该为您的页面(和 DataObjects)配置一个 table_name,它将有自己的数据库表。

在您自己的代码中,最好通过添加私有(private)静态属性来实现,如下所示:

private static $table_name = 'ArticlePage';

为避免名称冲突,最好在表名前加上您自己的公司名称或类似名称。但只有当您正在开发将在多个上下文中运行的模块或其他代码时,这才真正重要。

使用静态属性的替代方法是通过 YML 定义它。因此,在您的 _config/mysite.yml 中,您将放置:

SilverStripe\Lessons\ArticlePage:
table_name: ArticlePage

注意: table_name 的变化是在 SilverStripe 4.0.0 之后引入的,因此本课可能没有涵盖这个主题。

关于php - 未为类设置 Silverstripe table_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48806720/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com