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, становитесь литералом и не оцениваете значение

Другие вопросы по тегам