在Silverstripe 3.1中从内部连接中选择多个列

时间:2016-07-14 15:33:07

标签: php mysql sql silverstripe

在Silverstripe 3.1的事件日历模块中,我向CalendarEvent添加了一些额外的字段。我想在我的模板中使用这些,但是从我的研究中我看到事件被导出为CalendarDateTime,因此我无法使用其他字段。

我发现在getStandardEvents函数中,有一个内连接,我认为是导致问题,但我无法弄清楚是否可以从CalendarEvent加入列

$list = DataList::create('CalendarDateTime')
        ->filter(array(
            'EventID' => [139, 140, 141, 143]
        ))
        ->innerJoin('CalendarEvent', "EventID = \"{CalendarEvent}\".\"ID\"")
        ->innerJoin("SiteTree", "\"SiteTree\".\"ID\" = \"{CalendarEvent}\".\"ID\"")
        ->where("Recursion != 1");

注意:在我的代码中,我将一些列作为变量,因此我将它们写为正在进行的值。 这是原始代码:

$list = DataList::create($datetimeClass)
        ->filter(array(
            $relation => $ids
        ))
        ->innerJoin($eventClass, "$relation = \"{$eventClass}\".\"ID\"")
        ->innerJoin("SiteTree", "\"SiteTree\".\"ID\" = \"{$eventClass}\".\"ID\"")
        ->where("Recursion != 1");

我试图在DataList :: create()中添加'CalendarEvent'作为第二个参数,但没有结果。我有相同的输出。

那么如何从CalendarDateTime和CalendarEvent表中选择列? 任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

我找到了一种手动方式:

$list = DB::query('SELECT * FROM "CalendarDateTime" INNER JOIN "CalendarEvent" ON "EventID" = "CalendarEvent"."ID" INNER JOIN "SiteTree" ON "SiteTree"."ID" = "CalendarEvent"."ID" WHERE "Recursion" != 1');

欢迎任何其他解决方案。

相关问题