Extbase добавить вычисляемое поле в запросе / хранилище
У меня нормальное расширение extbase.
В контроллере я получаю все свои записи:
$stuff = $this->jobRepository->findAll();
$this->view->assign('stuff', $stuff);
и в шаблоне я отображаю их:
<f:for each="{stuffs}" as="stuff">
{stuff.title} <br />
{stuff.category}
</f:for>
Теперь мне нужно новое поле stuff.isnew
со значением 1
если запись самая новая по категории.
SQL-оператор для этого будет выглядеть так:
SELECT j2.isnew, j.* FROM `tx_stuff_domain_model_stuff` as j
left join
(SELECT max(crdate) as crdate, category, 1 as isnew FROM `tx_stuff_domain_model_stuff` group by category) as j2
on j.crdate=j2.crdate and j.category=j2.category
(Если мне нужно написать собственный запрос, я должен проверить удаленные, скрытые, время начала, время окончания, чтобы проверить, активна ли запись сейчас)
Теперь мой вопрос: каков самый чистый / лучший способ добавить это в мое расширение?
2 ответа
На самом деле вам не нужно использовать дополнительный запрос вообще... хотя это всегда первая запись, которая является новой, вы можете просто использовать iterator
из for
ViewHelper:
<f:for each="{stuffs}" as="stuff" iteration="iterator">
<f:if condition="{iterator.isFirst}">THIS ONE IS BRAND NEW STUFF! </f:if>
{stuff.title} <br />
{stuff.category}
</f:for>
Мое решение было бы реализовать метод findAll
в хранилище вакансий. Было бы сначала использовать метод findAll
из родительского класса, чтобы получить все рабочие места. Обычные ограничения уже будут применены. Затем он пройдется по полученным работам и отметит самую новую.
Также должна быть возможность создать пользовательский запрос для достижения вашей цели, но это, вероятно, потребует много усилий.