我正在尝试运行查询,但发生了一些奇怪的事情:
$return = MyCustomPage::get()->where(
" MyCustomPage.ID IN(" . implode(',', $MyCustomPageIds) . ")"
)->limit(2);
由于查询试图从 MyCustomPage_Live 而不是 MyCustomPage 获取数据,因此返回错误。
这个逻辑就像改变一样,有时它从一个表有时从另一个表中获取,我需要在查询中指定表名(例如MyCustomPage.ID或MyCustomPage_Live.ID)
有没有更好的方法来解决这个问题或任何解决方案?
答案 0 :(得分:1)
您不需要where
语句来执行此操作,您可以执行CustomPage::get()->filter(['ID' => $CustomPageArray])->limit(2)
的操作。作为SilverStripe中的第二个参数的数组被视为IN
类型的查询。使用filter
也会自动解决您运行的版本问题。
如果你真的需要使用where
,这样的话会有所帮助:
$extra = '';
if (Versioned::current_stage() == 'Live') {
$extra = '_live'
}
Page::get()->where('MyFilter' . $extra . '.ID' IN implode(',', $CustomIds));
在这里输入代码
(请原谅任何语法错误;))