Silverstripe SQL Logic

时间:2018-02-23 09:40:22

标签: php mysql silverstripe

我正在尝试运行查询,但发生了一些奇怪的事情:

$return = MyCustomPage::get()->where(
    " MyCustomPage.ID IN(" . implode(',', $MyCustomPageIds) . ")"
)->limit(2);

由于查询试图从 MyCustomPage_Live 而不是 MyCustomPage 获取数据,因此返回错误。

这个逻辑就像改变一样,有时它从一个表有时从另一个表中获取,我需要在查询中指定表名(例如MyCustomPage.ID或MyCustomPage_Live.ID)

有没有更好的方法来解决这个问题或任何解决方案?

1 个答案:

答案 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));

在这里输入代码

(请原谅任何语法错误;))