根据我的经验,如果在创建新类时没有指定$ db,则该页面类型的所有数据都会进入Page&& SiteTree表。
我个人觉得这种行为非常混乱,没有任何组织,并且希望拥有自己拥有桌子的任何东西。
有没有办法明确设置一个新类,并使用自己的表,无论它是否通过$ db添加任何其他字段?
答案 0 :(得分:3)
有没有办法明确设置一个新类,并使用自己的表,无论它是否通过$ db添加任何其他字段?
没有
一旦DataObject
(其中SiteTree
只是其子类)包含$db
静态,则会创建一个具有相同名称的表,其中包含您定义的字段在$db
。
做任何不同的事情就是"打破SilverStripe"以及它如何使用其ORM。如果您创建DataList
并转储其sql()
方法的输出,则会看到Page
的查询已加入SiteTree
表。这样做实际上是 tidier ,因为您始终可以期望Title
,Content
(等)字段位于SiteTree
表中以及您声明的任何自定义内容在Page
和Page
子类中,位于各自的表中。
$sql = SiteTree::get()->filter('ClassName', 'Page')->sql();
var_dump($sql);