Silverstripe:过滤$ DataObject :: get()

时间:2017-09-20 22:03:24

标签: php silverstripe data-objects

我正在构建一个存档页面,我无法在一年之内提取和过滤我的结果。

页面类型有一个下拉列表,用于选择应显示的年份

private static $db = array(
    "SubType" => "Enum(array('2013', '2014', '2015', '2016', '2017', '2018'))"
);

模板调用函数GetFilms

public function GetFilms()
{
    $films = DataObject::get("Film");
    return $films;
}

如果我使用上面的功能,它可以工作但显示所有电影。

当我尝试修改它以使用已过去的年份进行过滤时,

public function GetFilms($SubType)
{
    $films = DataObject::get("Film","'Year' = '$SubType'");
    return $films;
}

该页面不再显示任何影片。有谁知道我做错了什么?

以下是显示结果的代码

<% loop GetFilms($SubType) %>
    <div class="film" data-title="$Title">
        <a href="$Top.Link?film=$ID">
        <div class="inner">
            <h3 class="filmTitle">$Title</h3>
            <img class="filmImg" src="$FilmImage.URL" alt="$Title" />
        </div>
        </a>
    </div>
<% end_loop %>

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我建议做一些调试。您可以在GetFilms()中添加一些点,例如var_dump($SubType);查看模板传入的内容。您应该检查是否可以使用虚拟值手动访问Film DataObjects,例如Film::get()->filter(['Year' => 2013]),然后,一旦您将数据源和方法输入作为问题区域删除,您就可以将其重新组合在一起。

我还建议使用DataList方法从DataObject::get参数转向可链式方法,例如:

public function GetFilms($SubType)
{
    return Film::get()->filter(['Year' => $SubType]);
}

答案 1 :(得分:0)

删除额外的&#39;&#39;从$ SubType到
即$ films = DataObject :: get(&#34; Film&#34;,&#34;&#39; Year&#39; = $ SubType&#34;); 当您将$ SubType单引号时,变为文字并且不评估值