2013-12-17 3 views
0

У меня есть нормальное расширение 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 

(Если я должен написать свой собственный запрос я должен проверить удален, скрытые, время_запуска, время окончания, чтобы проверить, если запись активна правая сейчас)

Мой вопрос сейчас в том, что является самым чистым/лучшим способом добавить это к моему расширению?

ответ

0

Моим решением было бы реализовать метод findAll в репозитории заданий. Сначала он будет использовать метод findAll из родительского класса для получения всех заданий. Обычные ограничения уже будут применены. Затем он будет обрабатывать результирующие задания и отмечать самые новые.

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

+0

Я сделал это с обычаем запрос прямо сейчас. Я не узнаю, как добавить самосозданное поле (isnew). Может быть, мне нужно добавить его в модель с геттером и сеттером? - В любом случае это не имеет значения, потому что мне нужно это поле только для начальной сортировки, поэтому мне не нужно значение в интерфейсе, так как я могу заказать SQL-заявление с полем isnew. – nbar

0

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