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