Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silverstripe:筛选$DataObject::get()_Php_Silverstripe_Data Objects - Fatal编程技术网

Php Silverstripe:筛选$DataObject::get()

Php Silverstripe:筛选$DataObject::get(),php,silverstripe,data-objects,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");

我正在构建一个归档页面,我很难按年提取和过滤我的结果

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

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 %>


谢谢你的帮助

我的建议是进行一些调试。您可以将一些点添加到
GetFilms()
中,例如
var\u dump($SubType)
查看模板传递的内容。您应该检查是否可以使用伪值手动访问您的Film数据对象,例如
Film::get()->filter(['Year'=>2013])
,然后在消除数据源和方法输入作为问题区域后,您可以将其重新组合起来

我还建议从
DataObject::get
参数转移到使用DataList方法的可链接方法,例如:

public function GetFilms($SubType)
{
    return Film::get()->filter(['Year' => $SubType]);
}
将额外的“”从$SubType删除到
ie$films=DataObject::get(“Film”,“Year”=$SubType”);
当您在$SubType中使用单引号时,将变为literal,而不计算值

谢谢您的帮助!我已经做了一个var_转储,它收到了正确的日期。我还尝试使用原始sql,$films=DB::query(“选择*FROM
film
WHERE
Year
='2016'”)->value();但我遇到了同样的问题,没有电影出现。我在phpmyadmin中运行了这个sql,它返回了结果。我曾尝试在url中添加/?showqueries以检查查询,但看起来很好。我想知道是否是因为您的列名为“Year”(MySQL中的保留字),我已将该列更改为“FilmYear”,并更新了该函数。数据对象::get(“Film”,“FilmYear'=“$SubType”);不起作用。DB::query(“从
film
WHERE
FilmYear
='2016'”)->value()中选择*;不起作用。但您最初的建议是,返回Film::get()->filter(['FilmYear'=>$SubType]);作品我不知道为什么其他人不这么做,那不是真的对不起,我错了。我没有注意到这个DataObject::get(“Film”,“Year=”$SubType'))的外部双引号;一年内没有''