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 из родительского класса, чтобы получить все рабочие места. Обычные ограничения уже будут применены. Затем он пройдется по полученным работам и отметит самую новую.

Также должна быть возможность создать пользовательский запрос для достижения вашей цели, но это, вероятно, потребует много усилий.

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