在DataObject :: get()中编写自定义SQL查询

时间:2013-12-21 11:18:13

标签: php mysql silverstripe

我正在使用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();

中编写此查询

非常感谢任何帮助..谢谢

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用ORM构建该查询,在2.4中它可以像这样完成(仅当类Site具有has_manyPage时才有效,我假设就是这里的情况):

$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'
);