Как вывести определенное количество записей из БД?
Всем привет!
Создал в билдере плагин (October CMS), необходимо выводить записи на странице.
Делаю такой запрос:
{% for record in records if record.status == 1 and record.type_post == 'news' %}
{% endfor %}
Он выводит все записи с этим условием. А как вывести только определённое количество записей (например последние 3) с этим условием или все кроме последних трёх?
Пробовал использовать slice
{% for record in records|slice(0, 2) if record.status == 1 and record.type_post == 'news' %}
{% endfor %}
но если например в очереди третьем идет запись которая не попадает в условие, то slice тоже учитывает его и цикл выводит всего две записи которые попадают в условие.
Можете использовать внутри for переменную loop для вывода каких то определенных элементов коллекции.
Но в целом, какая то спорная практика, вытаскивать все записи из БД и фильтровать их потом в шаблоне. Лучше сделать это на этапе запроса к БД.
Спасибо что ответили. Да, я читал в документации Twig про переменную loop, но не понял как её использовать для получения необходимого результата, поэтому и задал этот вопрос.
Тут с вами полностью согласен, что вытаскивать все записи из БД и фильтровать их - плохо. Просто я только начал разбираться с этим шаблонизатором и Builder'ом в October CMS, поэтому пока так)
Сейчас вывожу записи в нужном виде не средствами Builder'а, а средствами Laravel.
Например так попробуйте вытащить последние N записей:
{% for record in records if record.status == 1 and record.type_post == 'news' %}
{% if loop.length - loop.index < N %}
// your code
{% endif %}
{% endfor %}
Да, так пробовал, работает без условия в for. Но нельзя использовать loop.lenght если есть условие в for.
The loop.length, loop.revindex, loop.revindex0, and loop.last variables are only available for PHP arrays, or objects that implement the Countable interface. They are also not available when looping with a condition.
Тут нужно разбираться с плагином Builder, как он формирует запросы к таблице. С самим шаблонизатором Twig я в принципе разобрался. Но спасибо что откликнулись!