Silverstripe:过滤 $DataObject::get()
Silverstripe: Filtering a $DataObject::get()
我正在构建存档页面,但无法按年份提取和过滤结果。
页面类型有一个下拉列表select应该显示哪一年
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_dump($SubType);
查看模板传入的内容。您应该检查是否可以使用虚拟值手动访问您的电影数据对象,例如Film::get()->filter(['Year' => 2013])
,然后一旦您消除了数据源和方法的输入作为问题区域,您就可以将它们拼凑起来。
我还建议从 DataObject::get
参数转向使用 DataList 方法的可链接方法,例如:
public function GetFilms($SubType)
{
return Film::get()->filter(['Year' => $SubType]);
}
从 $SubType 中删除额外的 '' 到
即 $films = DataObject::get("Film","'Year' = $SubType");
当你把单引号放在 $SubType 上时,变成文字并且不计算值
我正在构建存档页面,但无法按年份提取和过滤结果。
页面类型有一个下拉列表select应该显示哪一年
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_dump($SubType);
查看模板传入的内容。您应该检查是否可以使用虚拟值手动访问您的电影数据对象,例如Film::get()->filter(['Year' => 2013])
,然后一旦您消除了数据源和方法的输入作为问题区域,您就可以将它们拼凑起来。
我还建议从 DataObject::get
参数转向使用 DataList 方法的可链接方法,例如:
public function GetFilms($SubType)
{
return Film::get()->filter(['Year' => $SubType]);
}
从 $SubType 中删除额外的 '' 到
即 $films = DataObject::get("Film","'Year' = $SubType");
当你把单引号放在 $SubType 上时,变成文字并且不计算值