[英]Silverstripe table_name not set for class
我剛剛學習SilverStripe,我實際上在silverstripe網站上的課程有問題。
我有這門課:
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我在構建頁面上得到這個反饋:
所以我接下來做的是實際注釋掉$ db數組的聲明。 然后我從dev / build獲得了這個反饋:
所以我不確定的一些事情。 dev / build的第一個輸出中的紅色注釋表明您應該為所有命名空間模型定義table_name。 它確實沒有聲明我有一個未定義的table_name。 但是它下面的下一個注釋表示沒有為類SilverStripe \\ Lessons \\ ArticlePage設置table_name。 那么定義一個table_name並在這些消息的上下文中“設置”table_name是一回事嗎?
此外,第二個輸出表明為SilverStripe \\ Lessons \\ ArticlePage定義了table_name事實上每個table_name都附加了“2”,這是我在開始這篇文章之前進行實驗的結果我相信。 即,一旦我看到這種行為,我重復實驗嘗試重現行為,因此創建和刪除了更多的表,因此他們的名字必須遞增。 那么為什么沒有設置ArticlePage table_name? 有人可以幫我解決這個問題嗎? 戴夫。
該消息意味着您應該為具有自己的數據庫表的頁面(和DataObjects)配置table_name
。
在您自己的代碼中,最好通過添加私有靜態屬性來實現,如下所示:
private static $table_name = 'ArticlePage';
為避免名稱沖突,最好在表名前加上您自己的公司名稱或類似名稱。 但是,如果您正在開發將在多個上下文中運行的模塊或其他代碼,這才是非常重要的。
使用靜態屬性的替代方法是通過YML定義它。 所以在你的_config/mysite.yml
你會放:
SilverStripe\Lessons\ArticlePage:
table_name: ArticlePage
注意:使用table_name
的更改是在SilverStripe 4.0.0之后引入的,因此該課程可能未涵蓋此主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.