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

Спасибо за помощь!

1

Решение

То, что я бы посоветовал, это сделать отладку. Вы можете добавить несколько очков в GetFilms() например var_dump($SubType); чтобы увидеть, что передает шаблон. Вы должны убедиться, что к вашим объектам Film DataObjects можно обращаться вручную, используя фиктивные значения, например, Film::get()->filter(['Year' => 2013])затем, после того как вы исключили источник данных и входные данные метода в качестве проблемных областей, вы можете собрать их воедино.

Я бы также предложил отойти от DataObject::get аргументы для цепного подхода с использованием методов DataList, например:

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

Другие решения

удалить лишний » из $ SubType в
т.е. $ films = DataObject :: get («Film», «Year» = $ SubType «);
когда вы помещаете одинарную кавычку в $ SubType, становитесь литералом и не оцениваете значение

0

По вопросам рекламы [email protected]