我正在使用Silverstripe 2.4版。我没有更新到新版本,因为我做了很多更改,现在我无法迁移到更新的版本。
我有一个自定义SQL查询,我希望查询在DataObject :: get();中运行 这是我的查询
SELECT STL。* FROM Page
P加入SiteTree_Live
STL on P.ID = STL.ID加入Site
S on P.SiteID = S.ID其中S.ID = 60和STL.ShowInMenus = 1和STL.ParentID = 0和STL.CanViewType<> 'NotLoggedInUsers'..
如何在DataObject :: get();
中编写此查询非常感谢任何帮助..谢谢
答案 0 :(得分:0)
最简单的方法是使用ORM构建该查询,在2.4中它可以像这样完成(仅当类Site
具有has_many
到Page
时才有效,我假设就是这里的情况):
$site = DataObject::get('Site', 'ID = 60');
// the line below assumes that the has_many in site is called "Pages"
$pages = $site->Pages("ShowInMenus = 1 AND ParentID = 0 AND CanViewType <> 'NotLoggedInUsers'");
或者,如果你想为Site节省额外的查询,可以使用join参数使用1 DataObject :: get()。应该看起来像这样:
$pages = DataObject::get(
'Page',
"Site.ID = 60 AND ShowInMenus = 1 AND ParentID = 0 AND CanViewType <> 'NotLoggedInUsers'",
null,
'LEFT JOIN Site ON Site.ID = Page.SiteID'
);