Silverstripe: фильтрация $DataObject::get()
Я создаю страницу архива, и у меня возникают проблемы с извлечением и фильтрацией результатов по годам.
Тип страницы имеет выпадающий список, чтобы выбрать, какой год должен отображаться
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 ответа
То, что я бы посоветовал, это сделать отладку. Вы можете добавить несколько очков в GetFilms()
например var_dump($SubType);
чтобы увидеть, что передается в шаблоне. Вы должны проверить, что к вашим объектам Film DataObjects можно обращаться вручную, используя фиктивные значения, например 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, становитесь литералом и не оцениваете значение